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
}
Другие вопросы по тегам