Подтвердить что ты не робот

Регистрация протоколов Python между stdout и stderr

Возможно ли иметь сообщения о протоколе python, которые являются INFO или DEBUG, для перехода на стандартный вывод и WARNING или больше, чтобы перейти к stderr?

4b9b3361

Ответ 1

Это похоже на то, что я хочу:

    #!/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)

Ответ 2

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

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

Но теперь я вижу, что он не будет делать то, что вы хотите (разделите INFO/DEBUG из WARNING/ERROR)

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