TimedRotatingFileHandler не работает нормально в Django с несколькими экземплярами

Я использую TimedRotatingFileHandler для регистрации журнала Django и поворота каждый день, но проверьте файл журнала, странная проблема-вчера журнал усекается и регистрирует несколько сегодняшних журналов, вчера журнал потерян!

Джанго 1.4
на uwsgi 1.4.9
В Python 2.6

Я запускаю экземпляр 8 django с uwsgi. В setting.py is

'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 ответов


вы не должны входить в файловый обработчик из нескольких процессов одновременно - это не поддерживается, так как для него нет портативной поддержки ОС.

, чтобы войти в одно место из нескольких процессов, вы можете использовать один из следующих подходов:

  • использовать что-то вроде ConcurrentLogHandler
  • использовать SysLogHandler (или NTEventLogHandler в Windows)
  • использовать SocketHandler который отправляет журналы в отдельный процесс для запись в файл
  • использовать QueueHandler С multiprocessing.Queue, как указано здесь.