Python ConcurrentLogHandler:与Tornado HttpServer

时间:2016-04-12 13:59:29

标签: python logging tornado

我正在使用ConcurrentLogHandler将我的Python应用程序日志消息记录到文件中。 Tornado的HTTPServer在生产中用作服务器,在某些条件下(用户表单提交),我想强制翻转文件。 我遇到的问题是,当运行logger.handlers [0] .doRollover()时,翻转不会发生,我也没有看到错误。

我的应用程序的许多模块从以下模块导入“logger”对象以写入日志:

import logging
import logging.handlers
from cloghandler import ConcurrentRotatingFileHandler
from my_app import app

logger = logging.getLogger('my_app')
hdlr = ConcurrentRotatingFileHandler(app.config['LOG_PATH'], maxBytes=5e+8, backupCount=10)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)

在使用ConcurrentLogHandler之前,我使用的是RotatingFileHandler,并且执行logger.handlers [0] .doRollover()会导致在堆栈上的os.rename上触发“文件忙”错误。

有没有办法可以通过此设置强制进行翻转,或者我是否应该进行更改以使其成为可能?我使用Centos作为服务器,因此文件系统是UNIX / Linux。在我的应用程序运行时,我可以随时在日志文件中看到[filename] .lock文件。

谢谢,

1 个答案:

答案 0 :(得分:0)

ConcurrentLogHandler确实可以通过logger.handlers [0] .doRollover()进行转存。我遇到的问题是我之前使用过RotatingLogHandler,并且.lock文件保留在日志目录中,防止它被翻转。删除锁定文件并将ConcurrentLogHandler保留为首选处理程序(而不是RotatingLogHandler)可以解决问题。