TimedRotatingFileHandler在具有多实例的Django中不能正常工作

时间:2013-09-17 03:20:20

标签: python django logging

我使用TimedRotatingFileHandler来记录Django日志并每天轮换,但检查日志文件,奇怪的问题是昨天日志被截断并记录了今天的日志,昨天日志丢失了!

Django 1.4
uwsgi 1.4.9
Python 2.6

我用uwsgi启动8 django实例。 setting.py是

'handlers': {
    'apilog': {
        'level': 'INFO',
        'class': 'logging.handlers.TimedRotatingFileHandler',
        'filename': os.path.join(APILOG, "apilog.log" ),
        'when': 'midnight',
        'formatter': 'info',
        'interval': 1,
        'backupCount': 0,
    },
 },
 'loggers': {                                                                                                                        
    'apilog': {
        'handlers': ['apilog'],
        'level': 'INFO',
        'propagate': True  
     },
  }

我错过了什么吗?为什么旧的日志丢失?

1 个答案:

答案 0 :(得分:12)

您不应该同时从多个进程登录到基于文件的处理程序 - 这是不受支持的,因为它没有可移植的操作系统支持。

要从多个进程登录到单个目标,可以使用以下方法之一:

  • 使用ConcurrentLogHandler
  • 之类的内容
  • 使用SysLogHandler(或Windows上的NTEventLogHandler
  • 使用SocketHandler将日志发送到单独的进程以写入文件
  • QueueHandlermultiprocessing.Queue一起使用,如here所述。