Python日志管理器

2 投票
1 回答
1967 浏览
提问于 2025-04-16 02:57

我有几个Python程序是同时运行的。
我想写一个Python程序来管理这些程序的日志,也就是说,其他程序会把日志信息发送给这个程序,然后这个程序会把信息写入日志文件。
另一个重要的功能是,如果其中一个程序崩溃了,"管理日志程序"会知道这个情况,并且可以把它记录到日志文件里。
我尝试使用这个示例 http://docs.python.org/library/logging.html#sending-and-receiving-logging-events-across-a-network,但我没有成功。

有没有人能帮帮我?

1 个回答

1

我写了一个Python日志记录器,功能正是这样(还支持MPI)。

你可以在这里找到它:https://github.com/JensTimmerman/VSC-tools/blob/master/vsc/fancylogger.py

这个日志记录器可以把日志发送到远程机器上的UDP端口。

在那台机器上,我运行了一个守护进程,它会收集日志并把它们写入文件:https://github.com/JensTimmerman/VSC-tools/blob/master/bin/logdaemon.py

这个脚本会为你启动守护进程:https://github.com/JensTimmerman/VSC-tools/blob/master/bin/startlogdaemon.sh

如果你接着启动你的Python进程,并且比如用MPI并行运行,你只需要使用fancylogger.getLogger(),然后像普通的Python日志记录器那样使用它。它会自动获取脚本中设置的环境变量,记录到那个服务器上,并且在日志记录中会包含一些额外的MPI信息(比如MPI线程编号)。

如果你不使用MPI,你有两个选择:

  • 在每个启动远程Python进程的终端手动设置'FANCYLOG_SERVER'和'FANCYLOG_SERVER_PORT'这两个变量。

  • 或者直接启动守护进程。在Python脚本中获取你的日志记录器。

像这样:

import fancylogger
fancylogger.logToUDP(hostname, port=5005)
logger = fancylogger.getLogger()

撰写回答