我有几个并行运行的python程序。 我想编写一个python程序来管理程序日志,这意味着其他程序会将日志消息发送到该程序,程序会将其写入日志文件。 另一个重要的特性是,如果其中一个程序崩溃,“管理日志程序”将知道它并可以将其写入日志文件。 我尝试使用此示例http://docs.python.org/library/logging.html#sending-and-receiving-logging-events-across-a-network 但我失败了。
任何人都可以帮助我吗?
答案 0 :(得分: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进程的每个shell中手动设置'FANCYLOG_SERVER'和'FANCYLOG_SERVER_PORT'变量
或者只是启动守护进程。并在python脚本中获取您的记录器
import fancylogger
fancylogger.logToUDP(hostname, port=5005)
logger = fancylogger.getLogger()