Как настроить формат регистрации сообщений Python 2.3? - PullRequest
4 голосов
/ 29 октября 2009

В Python 2.4 и более поздних версиях настройка модуля ведения журнала для более простого форматирования проста:

logging.basicConfig (level = opts.LOGLEVEL, format = "% (message) s")

, но для приложений, которые должны поддерживать Python 2.3, это кажется более сложным, потому что API журналирования был переработан в Py2.4. В частности, basicConfig не принимает никаких аргументов. Пробуя вариант на единственном примере в документации Py2.3, я получаю это:

try:
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s")
except:
    logging.getLogger().setLevel(opts.LOGLEVEL)
    h = logging.StreamHandler()
    h.setFormatter(logging.Formatter("%(message)s"))
    logging.getLogger().addHandler(h)

но вызывает этот корневой логгер в Py2.3, например

logging.info("Foo")

дает дублированный вывод:

Foo
INFO:root:Foo

Я не могу найти способ изменить формат существующего обработчика на корневом логгере в Py2.3 (блок «кроме» выше), следовательно, вызов «addHandler», который производит дублированный вывод. Есть ли способ установить формат корневого регистратора без этого дублирования? Спасибо!

1 Ответ

4 голосов
/ 30 октября 2009

except: без исключения, класс [es] - хороший способ попасть в беду. Я считаю, что модуль logging в Python 2.3 имеет функцию basicConfig(), но с меньшим количеством опций. Так как он принимает **kwargs, он может потерпеть неудачу в любой момент после выполнения некоторой работы. Я думаю, что он уже установил обработчик с форматом по умолчанию, но не смог что-то настроить. После отлова исключения вы установили другой обработчик. Имея 2 обработчика, вы получаете 2 сообщения для каждого события. Самый простой способ в вашем случае: вообще не использовать basicConfig() и настроить logging вручную. И никогда не используйте except:, если вы не ререйзируете или не регистрируете пойманное исключение.

...