django / python logging - PullRequest
       15

django / python logging

0 голосов
/ 16 июня 2011

У меня довольно странная проблема с моим средством ведения журналов, которое я использую внутри django / python.Регистрация больше не работает, так как я обновился до django 1.3.Кажется, это связано с уровнем ведения журнала и настройкой «debug =» в файле settings.py.

1) Когда я регистрирую сообщения INFO и debug = False, запись в журнал не происходит, мой файлне добавляется2) Когда я регистрирую сообщения WARNING и debug = False, запись в журнал работает так, как я хочу, файл добавляется 3) Когда я регистрирую сообщения INFO и debug = True, запись в журнал, кажется, работает, файл добавляется.

Как я могу регистрировать сообщения INFO с помощью debug = False?Это работало до django 1.3 ... есть ли где-то загадочная обстановка, которая добивается цели?Ниже приведен пример кода:

views.py:

import logging

logging.basicConfig(level=logging.INFO,
                format='%(asctime)s %(levelname)s %(message)s',
                filename='/opt/general.log',
                filemode='a')


def create_log_file(filename, log_name, level=logging.INFO):
    handler = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 7, backupCount=10)
    handler.setLevel(level)
    formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s', '%a, %Y-%m-%d %H:%M:%S')
    handler.setFormatter(formatter)
    logging.getLogger(log_name).addHandler(handler)

create_log_file('/opt/test.log', 'testlog')

logger_test = logging.getLogger('testlog')

logger_test.info('testing the logging functionality')

С этим кодом ведение журнала не работает в Django 1.3 с отладкой, установленной на False вфайл settings.py.Когда я должен сделать так:

logger_test.warning('testing the logging functionality')

Это отлично работает, когда для отладки установлено значение False.Уровни DEBUG и INFO не регистрируются, но WARNING, ERROR и CRITICAL делают свою работу ...

У кого-нибудь есть идея?

1 Ответ

3 голосов
/ 16 июня 2011

Поскольку Django 1.3 содержит собственную конфигурацию ведения журнала, вам необходимо убедиться, что все, что вы делаете, не конфликтует с ним. Например, если в корневом логгере уже настроены обработчики Django к моменту первого импорта вашего модуля, ваш вызов basicConfig() не будет иметь никакого эффекта.

То, что вы описываете, - это нормальная ситуация ведения журнала - обрабатываются ПРЕДУПРЕЖДЕНИЯ и выше, в то время как INFO и DEBUG по умолчанию подавляются. Похоже, что ваш basicConfig() не имеет никакого эффекта; Вам следует подумать о замене вызова basicConfig () на соответствующую конфигурацию ведения журнала в settings.py или, по крайней мере, выяснить уровень корневого ведения журнала и какие обработчики подключены к нему во время вызова basicConfig().

...