Переопределение класса ведения журнала в WSGI не работает - PullRequest
3 голосов
/ 05 августа 2011

Я реализовал свой собственный регистратор для моего сайта django:

class SpecialLogger(logging.Logger):
    def __init__(self, name, level=logging.DEBUG):
        logging.Logger.__init__(self, name, level)

    def special(self, msg, *args, **kwargs):
        self.log(self.level, msg, *args, **kwargs)

В своем файле wsgi я добавил строки:

import logging
from testbed.utils import SpecialLogger
logging.setLoggerClass(SpecialLogger)

В моих представлениях django:

1  import logging
2  logger = logging.getLogger('mylog')
3  print str(logging.getLoggerClass())
4  print str(logger)
5  print dir(logger)

Печать строки № 3 testbed.utils.SpecialLogger

Печать строки № 4 <logging.Logger instance at 0x21aadcac>

И строка № 5 (конечно) не показывает мою функцию special

Что я сделал не так?Почему расхождения между строками 3 и 4?

1 Ответ

0 голосов
/ 08 августа 2011

Функция setLoggerClass устанавливает класс, который будет использоваться для всех регистраторов, созданных после возврата вызова, но любые регистраторы, созданные до вызова, все равно будут logging.Logger.Вы можете добавить строку в файл wsgi, чтобы подтвердить, что используется правильный класс, например,

import logging
from testbed.utils import SpecialLogger
logging.setLoggerClass(SpecialLogger)
logger = logging.getLogger('mylog') # should be a testbed.utils.SpecialLogger

Если это не дает желаемого эффекта, какой-то другой код (например, в settings.py) долженсоздание экземпляров логгеров до запуска приведенного выше кода.

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