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 中的错误吗?

4

3 回答 3

1

你需要设置:

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

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

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

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

于 2012-05-02T10:15:16.280 回答
0

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

于 2013-02-13T06:38:09.227 回答
0

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

于 2016-11-08T08:06:07.580 回答