web2py и python logging
У меня есть log2 web2py настроить, используя logging.conf, как это -
args=("logs/my_log.log", "a", 1000000, 5)
Но я получаю много маленьких файлов вроде этого -
166 Aug 8 05:48 my_log.log.1
34011 Aug 8 07:16 my_log.log.2
28650 Aug 8 10:36 my_log.log.3
9593 Aug 8 10:37 my_log.log.4
3222 Aug 8 12:13 my_log.log
В чем может быть проблема? У меня есть аналогичная конфигурация для планировщика web2py. Это создает только один файл и продолжает добавляться. У меня работает только одно задание планировщика. Создает ли web2py 5 файлов в этом конкретном случае, потому что может быть несколько сеансов, пытающихся записать в один файл, при этом происходит сбой, и в итоге создается 5 файлов?
1 ответ
Трудно сказать, не глядя на ваш файл конфигурации / настроек журнала web2y.
Я обнаружил, что легче обрабатывать журналы вне web2py - используйте общие настройки, не настраивайте web2py для поворота / архивирования / удаления журналов, но используйте что-то вроде logrotate
управлять всем этим.
Я столкнулся с аналогичной ситуацией с несколькими фоновыми процессами web2py, запущенными с --import_models. Планировщик аналогичным образом запускает фоновые процессы. Стандартные настройки logging.conf используют RotatingFileHandler. Этот обработчик, по-видимому, проверяет размер открытого им файлового дескриптора. Когда предел размера превышен, он открывает новый файл и переименовывает текущий файл.
Проблема в том, что каждый фоновый процесс web2py, включая процессы планировщика, просматривает ранее открытый файл журнала. Поэтому, когда один из процессов обнаруживает превышение предельного размера, этот процесс переходит к новому файлу журнала. Остальные процессы по-прежнему связаны с предыдущим файлом. Если другой процесс пытается что-то записать, он увидит превышение предельного размера и перейдет к новому файлу журнала. Вскоре каждый процесс будет писать в свои отдельные (небольшие) файлы журнала.
Мое решение состояло в том, чтобы переключиться на WatchedFileHandler и использовать logrotate для управления ротацией журналов. Перед любым событием записи в журнал WatchedFileHandler обнаружит, что его файл был повернут, и (повторно) откроет последний именованный файл журнала. Таким образом, все процессы будут писать в последний именованный файл журнала. Вот выдержка из моих настроек web2py logging.conf:
[handlers]
keys=consoleHandler,messageBoxHandler,watchedFileHandler
:
[logger_<your web2py app>]
level=WARNING
qualname=web2py.app.<your web2py app>
handlers=consoleHandler,watchedFileHandler
propogate=0
:
[handler_watchedFileHandler]
class=handlers.WatchedFileHandler
level=DEBUG
formatter=simpleFormatter
args=("logs/web2py.log","a")
Вот моя конфигурация logrotate в пользовательском пространстве
<path to logfile>/web2py.log {
rotate 5
maxsize 100000
compress
delaycompress
missingok
nocreate
}