django 1.3在每次写入时记录timedrotatingfilehandler截断文件

时间:2012-04-26 07:20:13

标签: python django logging django-views

我正在使用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 个答案:

答案 0 :(得分:1)

您需要设置:

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

从代码中,支持当前'何时'事件:

  • S - Seconds
  • M - 分钟
  • H - 小时
  • D - Days
  • 午夜 - 午夜翻身
  • W {0-6} - 在某一天翻身; 0 - 星期一

间隔是要计算的间隔数(例如,当=='H'和间隔== 2将导致2小时)。

答案 1 :(得分:0)

每当您创建日志文件时,只需在文件名中添加日期时间戳。这将确保永远不会截断该文件。

答案 2 :(得分:0)

我想有多个进程写入您的日志文件,在这种情况下,您可以使用ConcurrentLogHandler来避免截断。