В некоторых других технологиях мы иногда использовали уровень журнала ниже DEBUG, который, как я считаю, назывался «многословным».Я понимаю, что потребность в таком уровне очень субъективна.Но, на мой взгляд, «просто» иметь INFO и DEBUG недостаточно.У нас были случаи, когда нужно было регистрировать что-то очень спам (больше спама, чем отладки).На практике мы производили сборки без этого, но в некоторых случаях мы включали этот уровень ведения журнала после того, как весь продукт был установлен в какой-то настройке QA, отслеживая ошибку и т. Д.
IsЕсть ли способ (простой или нет) для регистрации чего-либо ниже уровня DEBUG, используя стандартную библиотеку журналов python?
В файле temp.py я могу сделать следующее:
logging.addLevelName(5,"verbose")
VERBOSE = 5
logger = logging.getLogger("foo")
logger.setLevel(VERBOSE)
logger.log(VERBOSE,"blah!")
Этоработает, когда я запускаю temp.py в своей IDE (и записывает в stdout), но наши реальные демоны используют стандартный синтаксис конфигурации файла / словаря для настройки ведения журнала, и я не вижу способа указать, что уровень 5 должен использоваться для демона.
Я гоняюсь за чем-то, что на самом деле неосуществимо?
Для тех, кто может задаться вопросом, зачем мне что-то ниже, чем DEBUG, это случайный тип регистрации, который может происходить очень часто (может быть, внутренний цикл), который я обычно не хотел бы видеть даже в DEBUG, но в некоторых производственных системах было бы полезно включить его один раз вбез необходимости добавлять дополнительные записи в исходный код и повторного развертывания, и т. д.
EDIT1 - Очевидно, библиотека ведения журнала допускает настраиваемые уровни.Так как DEBUG - это уровень 10, где-то есть место в диапазоне 1..9Если я определяю пользовательский уровень (например, в приведенном выше примере кода), я думаю, что мой реальный вопрос заключается в том, как включить этот уровень ведения журнала из файла конфигурации журнала json?
EDIT2 - следующее будет работать, еслиэто было не из-за того, что нам нужны / используются файлы конфигурации 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, и это сработало.
Конечно, сам оператор log неочень элегантно, потому что вы звоните:
self.logger.log(VERBOSE,"Something very spammy")
, а не
self.logger.verbose("Something very spammy")
Но я действительно не хотел изменять какой-либо код библиотеки логгера (был там, сделал это,рубашка).
Спасибо всем!
А тем, кто думает, что ничего более низкого, чем DEBUG, не нужно, больше сил для вас:)