Проблема с регистрацией в Python RotatingFileHandler на веб-сайте Django - PullRequest
11 голосов
/ 23 июля 2010

У меня есть веб-сайт с поддержкой django, и я использую стандартный модуль регистрации для отслеживания веб-активности.

Журнал выполняется через RotatingFileHandler, который настроен на 10 файлов журнала, по 1000000 байт каждый. Система журналов работает, но вот файлы журналов, которые я получаю:

-rw-r--r-- 1 apache      apache          83 Jul 23 13:30 hr.log
-rw-r--r-- 1 apache      apache      446276 Jul 23 13:03 hr.log.1
-rw-r--r-- 1 apache      apache      999910 Jul 23 06:00 hr.log.10
-rw-r--r-- 1 apache      apache         415 Jul 23 16:24 hr.log.2
-rw-r--r-- 1 apache      apache      479636 Jul 23 16:03 hr.log.3
-rw-r--r-- 1 apache      apache         710 Jul 23 15:30 hr.log.4
-rw-r--r-- 1 apache      apache      892179 Jul 23 15:03 hr.log.5
-rw-r--r-- 1 apache      apache         166 Jul 23 14:30 hr.log.6
-rw-r--r-- 1 apache      apache      890769 Jul 23 14:03 hr.log.7
-rw-r--r-- 1 apache      apache      999977 Jul 23 12:30 hr.log.8
-rw-r--r-- 1 apache      apache      999961 Jul 23 08:01 hr.log.9

Как видите, это беспорядок. Последний журнал был записан в файл hr.log.2 (23 июля 16:24) вместо hr.log , а документация по ведению журнала гласит:

[...] Например, при значении backupCount 5 и имени базового файла app.log вы получите app.log, app.log.1, app.log.2, до app.log.5. Файл, в который выполняется запись, всегда является app.log . Когда этот файл заполнен, он закрывается и переименовывается в app.log.1, а если существуют файлы app.log.1, app.log.2 и т. Д., То они переименовываются в app.log.2, app. лог.3 и т. д. соответственно.

Что я делаю не так?


Мой файл конфигурации регистрации:

logger.conf:

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=simple

#--------------------------------------------------------------------
# Formatters
[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

#--------------------------------------------------------------------
# Handlers
[handler_fileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simple
args=("/data/django/hr/hr.log",'a',1000000,10)

#--------------------------------------------------------------------
# Loggers
[logger_root]
level=DEBUG
handlers=fileHandler

и мой модуль python для настройки системы журналов:

logger.py

import os, logging

# Load config file
logger_config_file = \
    os.path.join(os.path.abspath(os.path.dirname(__file__)), 'logger.conf')
logging.config.fileConfig(logger_config_file)

# Create logger
logger = logging.getLogger('hr_Logger')

# Log start message
logger.info("Logging system started")

тогда, в верхней части моего views.py у меня есть:

import logging
from hr import logger

log = logging.getLogger('hr.views')
log.info('Load hr.views')

[...]

Ответы [ 3 ]

7 голосов
/ 15 марта 2011

Я обнаружил такое поведение, когда с вашим кодом выполняется несколько процессов.

К сожалению, идеального варианта не существует.

Вот некоторые идеи, которые вы можете включить:

  • использовать WatchedFileHandler (новое в версии 2.6) и вращаться с внешними программами как logrotate
  • использовать системный журнал или другой сервер агрегации журналов
  • использовать агрегирование журналов python sentry -это особенно полезно с django, так как вы можете регистрировать не только сообщения журнала, но и исключения с полной трассировкой стека и 404.
6 голосов
/ 05 августа 2011

Также, возможно, это стоит рассмотреть http://pypi.python.org/pypi/ConcurrentLogHandler/0.8.3

0 голосов
/ 05 марта 2011

Google включает этот ответ:

http://bytes.com/topic/python/answers/643884-rotatingfilehandler-bugs-errors-general-logging-question#post2552392

Может ли быть так, что у вас есть несколько процессов, выполняющих регистратор? Может быть, несколько приложений входят в одни и те же файлы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...