在 logging.config 中使用 TimedRotatingFileHandler 日志记录

11 投票
1 回答
18632 浏览
提问于 2025-04-17 07:58

我正在尝试使用一个叫做 TimedRotatingFileHandler 的工具,配合一个日志配置文件来进行测试,这其实没什么复杂的,目标是每10秒钟就生成一个新的日志文件。

不过我遇到了以下问题:

Traceback (most recent call last):
  File "testLogging.py", line 6, in <module>
    logging.config.fileConfig(logDir+'logging.conf')
  File "C:\Python26\Lib\logging\config.py", line 84, in fileConfig
    handlers = _install_handlers(cp, formatters)
  File "C:\Python26\Lib\logging\config.py", line 159, in _install_handlers
    h = klass(*args)
  File "C:\Python26\Lib\logging\handlers.py", line 195, in __init__
    raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0
is Monday): %s" % self.when)
ValueError: You must specify a day for weekly rollover from 0 to 6 (0 is Monday)
: WHEN='S'

这段 Python 代码很简单,它只是设置了一个无限循环,不断地记录日志。

import logging
import logging.config

logDir = "./logs/"

logging.config.fileConfig(logDir+'logging.conf')
logger = logging.getLogger('root')

while 1==1:        
    logger.info('THIS IS AN INFO MESSAGE')

这是我的配置文件:

[loggers]
keys=root

[logger_root]
level=INFO
handlers=timedRotatingFileHandler

[formatters]
keys=timedRotatingFormatter

[formatter_timedRotatingFormatter]
format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s
datefmt=%m-%d %H:%M

[handlers]
keys=timedRotatingFileHandler

[handler_timedRotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=timedRotatingFormatter
args=('./logs/log.out', 'when=\'S\'', 'interval=10', 'backupCount=5')

如你所见,设置的是 'S',而不是错误信息中提到的 'W'。

编辑:根据下面的回答,日志配置中的正确语法是:

args=('./logs/log.out', 'S', 10, 5, None, False, False)

1 个回答

18
args=('./logs/log.out', 'when=\'S\'', 'interval=10', 'backupCount=5')

看起来不太对。试试这个

args=('./logs/log.out', when='S', interval=10, backupCount=5)

或者可能试试这个

args=('./logs/log.out','S',10,5)

撰写回答