Возможно ли, чтобы сообщения протоколирования python были INFO или DEBUG для перехода на стандартный вывод и WARNING или больше, чтобы перейти в stderr?Разбиение на Python между stdout и stderr
11
A
ответ
-1
Я подумал, что это поможет: Handler.setLevel(lvl)
Устанавливает порог для этого обработчика к лвл. Ведение журнала сообщений, которые являются менее серьезными, чем lvl, будут игнорироваться. Когда обработчик создается, уровень устанавливается на NOTSET (который вызывает обработку всех сообщений).
Но теперь я вижу, что он не будет делать то, что вы хотите (раздвоение INFO/DEBUG из ПРЕДУПРЕЖДЕНИЕ/ОШИБКИ)
Это, как говорится, вы можете написать пользовательский обработчик (класс расширения logging.StreamHandler
, например) , и перезаписать метод Handler.handle()
.
30
Это, кажется, делать то, что я хочу:
#!/usr/bin/python
import sys
import logging
class InfoFilter(logging.Filter):
def filter(self, rec):
return rec.levelno in (logging.DEBUG, logging.INFO)
logger = logging.getLogger('__name__')
logger.setLevel(logging.DEBUG)
h1 = logging.StreamHandler(sys.stdout)
h1.setLevel(logging.DEBUG)
h1.addFilter(InfoFilter())
h2 = logging.StreamHandler()
h2.setLevel(logging.WARNING)
logger.addHandler(h1)
logger.addHandler(h2)
Это не достаточно, чтобы * стоп * предупреждающие сообщения записываются в стандартный вывод * еще *. –
Фильтр, вероятно, будет лучше. – glglgl
Правильно, я заметил это после отправки моего ответа. Исправлено. –