Как получить уровень записи в журнале в пользовательском logging.Handler в Python? - PullRequest
4 голосов
/ 17 июня 2010

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

Например:

log = logging.getLogger('application')

log.progress('time remaining %d sec' % i)
    custom method for logging to:
            - database status filed
            - console custom handler showing changes in a single console line

log.data(kindOfObject)
    custom method for logging to:
            - database
            - special data format

log.info
log.debug
log.error
log.critical
    all standard logging methods:
        - database status/error/debug filed
        - console: append text line
        - logfile

Если я использую пользовательский LoggerHandler, переопределив метод emit, Я не могу различить уровень записи журнала. Есть ли другая возможность получить во время выполнения информацию уровня записи?

class ApplicationLoggerHandler(logging.Handler):

  def emit(self, record):
    # at this place I need to know the level of the record (info, error, debug, critical)?

Есть предложения?

1 Ответ

11 голосов
/ 17 июня 2010

record является экземпляром LogRecord :

>>> import logging
>>> rec = logging.LogRecord('bob', 1, 'foo', 23, 'ciao', (), False)

и ваш метод может просто получить доступ к интересующим атрибутам (я делю результат dir для удобства чтения):

>>> dir(rec)
['__doc__', '__init__', '__module__', '__str__', 'args', 'created',
 'exc_info', 'exc_text', 'filename', 'funcName', 'getMessage', 'levelname',
 'levelno', 'lineno', 'module', 'msecs', 'msg', 'name', 'pathname', 'process',
 'processName', 'relativeCreated', 'thread', 'threadName']
>>> rec.levelno
1
>>> rec.levelname
'Level 1'

и так далее. (rec.getMessage() - это единственный метод, который вы используете в rec - он форматирует сообщение в строку, интерполируя аргументы).

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