使用 Python 将日志轮换到目录中

Lyn*_*Lee 4 python logging rotation

我有一个名为 Poller.log 的文件,它始终附加日志详细信息。我希望这个日志文件每天轮换一次,并且限制为 30 天。因此,该代码运行良好。

现在我希望已旋转的日志位于一个文件夹中(即logs/poller.log.2011-03-04_15-36)。是否有办法指示应在何处创建此旋转文件?

这个Python脚本将由Cron执行。

import logging
import logging.handlers

LOG_FILENAME = '/home/stackoverflow/snmpdata/poller.log'

# Set up a specific logger with our desired output level
poll_logger = logging.getLogger('pollerLog')

# Add the log message handler to the logger
log_rotator = logging.handlers.TimedRotatingFileHandler(LOG_FILENAME, when='d', interval=1, backupCount=30, encoding=None, delay=False, utc=False)
poll_logger.addHandler(log_rotator)

# Roll over on application start
poll_logger.handlers[0].doRollover()
Run Code Online (Sandbox Code Playgroud)

tit*_*ito 5

Python 日志处理程序不允许轻易做到这一点。您可能有两种方法来实现这一目标:

  1. 最简单的方法是将 LOG_FILENAME 设置为已经在 messages/poller.log 中,如果您想在其他任何地方访问 poller.log,请使用符号链接:)

  2. 从 TimedRotatingFileHandler 开始创建您自己的处理程序,并从 TimedRotatingFileHandler 类 /usr/lib/python2.X/logging/handlers.py 复制/粘贴 doRollover() 。并改变:

dfn = self.baseFilename + “.” + time.strftime(self.suffix, timeTuple)

dfn = os.path.join('logs', os.path.basename(self.baseFilename)) + "." + time.strftime(self.suffix, timeTuple)