Python日志记录:

时间:2017-01-06 09:26:39

标签: python linux logging tornado

Linux上运行了一个python tornado程序。最近,我发现了一个错误(可能不是)。某些导入操作记录将被记录到名为“dagger.log”的文件中。

由于logging.handler.RotatingFileHandler,当日志文件的长度接近maxBytes时,系统将连续创建 与基本文件具有相同路径名的新文件,但附加了扩展名“.1”,“。2”等。例如,如果backupCount为8,基本文件名为“app.log”,则会显示“dagger.log”,“dagger.log.1”,“dagger.log.2”,... “dagger.log.8”。

但我发现log file on Linux, picture

dagger.log。[1-8] dagger.log 是在1月4日13:11创建的, dagger.log。[1-8 ] 最后修改于1月4日13:31。这是不正常的。由于文件dagger.log未达到最大大小,因此不应创建 dagger.log。[1-8] 。更重要的是,每个日志文件都不同。他们根本没有相同的记录。

很长一段时间我很困惑,我无法解决它。有人可以帮助我吗? 请原谅我糟糕的英语。我不知道你能理解我的问题是什么吗?

1 个答案:

答案 0 :(得分:0)

您是否正在运行多个进程(使用tornado.process.fork_processes(8)tornado.httpserver.HTTPServer.start(8)?使用多个进程进行日志记录可能会非常棘手。分叉进程可能会开始共享同一个日志文件,然后何时进行轮换每个进程将独立旋转,创建8个新文件。

解决方案是在您启动子进程之后才配置日志记录,并为每个进程提供自己的日志文件名(或者,如grepe建议,只需登录到stdout / stderr并让一些外部进程处理文件和旋转)。我建议使用外部进程管理器和负载均衡器,但如果您仍想从Tornado应用程序中分叉子进程,它将看起来像这样(从HTTPServer初始化的"advanced multi-process"变体开始):< / p>

sockets = tornado.netutil.bind_sockets(8888)
task_id = tornado.process.fork_processes(0)
configure_logging('dagger%d.log' % task_id)
server = HTTPServer(app)
server.add_sockets(sockets)
IOLoop.current().start()