Python Logging - глобальное применение форматера - PullRequest
1 голос
/ 27 июня 2011

Я использую фразу !Silent, чтобы определить, где будет сохранена запись в журнале.
Если сообщение записи журнала содержит !Silent в начале строки, мой подкласс Filter отклоняет это сообщение в StreamHandler. Но сообщение передается другим обработчикам, таким как FileHandler или MemoryHandler, и передается с !Silent фразой.

Я создал простой подкласс Formatter для удаления этой фразы, включая белые символы в начале строки, но у меня проблемы с применением этого форматера к обработчикам.

Во многих местах моего приложения я изменяю обработчики корневого логгера, создавая, добавляя и удаляя его. Каждый из этих обработчиков должен иметь мой подкласс Formatter, но добавление вручную к каждому из них немного неудобно.

Я ищу способ применить класс Formatter глобально к корневому логгеру или перезаписать корневой логгер addHandler метод для добавления фильтра в обработчик перед добавлением его к корневому логгеру. Или более простой способ, если существует.

1 Ответ

1 голос
/ 27 июня 2011

Честно говоря, я не уверен, что полностью понял ваш вопрос, так что извините, если мой ответ не тот, который вы ищете ... все же, вместо применения фильтра на входе каждого обработчика, я бы добавил свойство к объект Unicode (или строка), который вы передаете. Что-то вроде:

>>> class LogMsg(unicode):
...      def __new__(cls, string_):
...         if string_[:7] == '!Silent':
...             cls.nolog = True
...             return super(LogMsg, cls).__new__(cls, string_[7:])
...         else:
...             cls.nolog = False
...             return super(LogMsg, cls).__new__(cls, string_)
... 
>>> a = LogMsg('The hard drive is on fire!')
>>> a
u'The hard drive is on fire!'
>>> a.nolog
False
>>> b = LogMsg('!SilentMy feet stink! :(')
>>> b
u'My feet stink! :('
>>> b.nolog
True

Таким образом, вы можете просто обойти 'строку', которая никогда не отображает !Silent, но имеет скрытый флаг (nolog), который вы можете проверить только в случае необходимости.

НТН, / Макинтош

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