每次写入时,Django 1.3日志TimedRotatingFileHandler都会截断文件。

3

我正在使用django 1.3的日志功能,并尝试实现一个timedrotatingfilehandler,以便每小时轮换日志。记录器每小时成功轮换,但似乎在每个日志请求期间都会截断文件。该文件仅具有最后编写的消息。这是django处理程序中的问题还是我遗漏了某些地方。以下是日志字典:

LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
    'standard': {
        'format' : "%(asctime)s:%(pathname)s:%(lineno)s: %(message)s",
        'datefmt' : "%d/%b/%Y %H:%M:%S"
    },
},
'handlers': {
    'logfile': {
        'level':'DEBUG',
        'class':'logging.handlers.TimedRotatingFileHandler',
        'filename': "/tmp/log1.log",
    'when' : 'hour',
    'interval' : 0,
        'formatter': 'standard',
    },
},
'loggers': {
    'collection': {
        'handlers': ['logfile'],
        'level': 'DEBUG',
    },
}
}

请注意:当将时间间隔设置为1时,日志文件不会被轮换。这是Django中的一个错误吗?
3个回答

1

您需要设置:

'when' : 'H',
'interval' : 1,

从代码中,当前支持的“when”事件:

  • S - 秒
  • M - 分钟
  • H - 小时
  • D - 天
  • midnight - 在午夜翻转
  • W{0-6} - 在特定的一天翻转; 0 - 星期一

间隔是要计数的间隔数(例如,当 == 'H' 并且 interval == 2 会导致 2 小时)。


0
无论何时创建日志文件,只需在文件名中添加日期时间戳。这将确保文件永远不会被截断。

0
我猜你的日志文件可能有多个进程在写入,如果是这样的话,你可以使用ConcurrentLogHandler来避免截断。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接