Ведение журнала Python - есть ли что-то ниже DEBUG?

В некоторых других технологиях мы иногда использовали уровень журнала ниже DEBUG, который, как мне кажется, назывался «подробным». Я понимаю, что потребность в таком уровне очень субъективна. Но, на мой взгляд, «просто» иметь INFO и DEBUG на самом деле недостаточно. У нас были случаи, когда нужно было регистрировать что-то очень спамное (больше спама, чем отладки). На практике мы производим сборки без этого включения, но в некоторых случаях мы включали этот уровень ведения журнала после того, как весь продукт был установлен при некоторой настройке QA, при отслеживании ошибки и т. Д.

Есть ли какой-либо способ (легко или иначе) зарегистрировать что-то ниже уровня DEBUG, используя стандартную библиотеку ведения журнала python?

В файле temp.py я могу сделать следующее:

logging.addLevelName(5,"verbose")
VERBOSE = 5

logger = logging.getLogger("foo")
logger.setLevel(VERBOSE)
logger.log(VERBOSE,"blah!")

Это работает, когда я запускаю temp.py в своей среде IDE (и logs в stdout), но наши настоящие демоны используют стандартный синтаксис конфигурации файла / словаря для настройки ведения журнала, и я не вижу никакого способа указать, что уровень 5 должен использоваться для демона.

Преследую ли я что-то, что на самом деле неосуществимо?

Для тех, кто может задаться вопросом, зачем мне что-то ниже, чем DEBUG, я могу использовать случайный тип журналирования, который может происходить очень часто (возможно, внутренний цикл). обычно не хотел бы видеть даже в DEBUG, но в некоторых производственных системах может быть полезно включать его время от времени без необходимости добавления дополнительных журналов в исходный код, повторного развертывания и т. д.

EDIT1 - Очевидно, что ведение журнала библиотека позволяет настраивать уровни. Поскольку DEBUG имеет уровень 10, есть место где-то в диапазоне 1..9. Если я определю настраиваемый уровень (например, в примере кода выше), я предполагаю, что реальный вопрос заключается в том, как мне включить этот уровень ведения журнала из файла конфигурации журнала json?

РЕДАКТИРОВАТЬ2 - Следующее будет работать, если бы это не было: t из-за того, что нам нужны / используются файлы конфигурации json (требование, которое я не могу изменить):

import logging

logging.basicConfig(filename='example.log',level=5)
VERBOSE = 5
logging.addLevelName(5,"verbose")
logger = logging.getLogger("bar")
logger.log(VERBOSE,"blah!")

EDIT3 - Разобрался ... Вызов

logging.addLevelName(5,"VERBOSE")

критичен. Просто у меня его не было в нужном месте. В моем случае мне просто нужно было, чтобы вышеуказанный вызов имел место перед вызовом dictConfig (...) библиотек журналирования. После того, как я сделал это, я смог войти в наш файл конфигурации журнала и переключить все (как в обработчике файлов, так и в корне) до VERBOSE, и это сработало.

Конечно, сам оператор журнала не совсем элегантен, потому что вы вызываете:

self.logger.log(VERBOSE,"Something very spammy")

, а не

self.logger.verbose("Something very spammy")

. Но я действительно не хотел изменять какой-либо код библиотеки регистратора (был там, сделал это, имел t- Рубашка).

Всем спасибо!

А тем, кто думает, что ничего ниже DEBUG не требуется, больше власти :)

17
задан Matthew Lund 28 January 2012 в 06:21
поделиться