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
, как указано здесь.