2013-04-17 2 views

ответ

-1

Я подумал, что это поможет: Handler.setLevel(lvl)

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

Но теперь я вижу, что он не будет делать то, что вы хотите (раздвоение INFO/DEBUG из ПРЕДУПРЕЖДЕНИЕ/ОШИБКИ)

Это, как говорится, вы можете написать пользовательский обработчик (класс расширения logging.StreamHandler, например) , и перезаписать метод Handler.handle().

+0

Это не достаточно, чтобы * стоп * предупреждающие сообщения записываются в стандартный вывод * еще *. –

+1

Фильтр, вероятно, будет лучше. – glglgl

+0

Правильно, я заметил это после отправки моего ответа. Исправлено. –

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) 
Смежные вопросы