2013-04-09 3 views
1

Я пытаюсь понять, как работает запись на python.Использование протоколов python и обработчика

Я получаю, что это экземпляр singleton, который применяется ко всему запущенному интерпретатору.

У меня есть эта функция:

def setup_logging(options=None): 
    '''setup the logger and return it''' 
    logging.basicConfig(level=logging.WARNING, 
         format='%(levelname)s: %(message)s', 
         filename='/tmp/pluser.log') 

    logger = logging.getLogger('pluser') 
    console = logging.StreamHandler() 
    console.setLevel(logging.DEBUG) 
    print(console.level) 
    logger.addHandler(console) 
    return logger 

То, что я называю с помощью этого:

console = setup_logging(options) 

    console.debug('Initializing database') 
    connect_to_db() 
    console.debug('Database initialized') 

(. Это подготовка делает больше протоколирования в разные места)

Теперь «консоль "является экземпляром" logging.Logger ". У этого есть StreamHandler. Этот обработчик потока имеет уровень 10 (который является logging.DEBUG). Однако, StreamMandler, похоже, не получает сообщения, потому что вещи только печатают на консоль (которая должна иметь stderr и stdout на нем) на консоли. Предупреждение, ошибка или критическое.

Итак, я явно пропустил что-то о том, как логгер взаимодействует либо с системой, либо с StreamHandler.

Моя цель - когда уровень StreamHandler должен отлаживаться, все печатает на консоль, но я также хотел бы понять, почему это не работает.

+0

Я добавил "logging.StreamHandler (sys.stdout), а затем он печатает 3 раза подряд, если я делаю console.warning, но все равно не печатаю при отладке. – qkslvrwolf

ответ

1

Хорошо, так что это был дан ответ здесь: logging setLevel, how it works

Резюмируя: регистратор, который вы добавляете обработчики потребности быть на уровне обработчика или ниже, в противном случае регистратор отклоняет сообщение, пока он не передается обработчик.

Так что мне нужно было установить мой базовыйConfig по умолчанию DEBUG, а не ПРЕДУПРЕЖДЕНИЕ. Если я затем хочу добавить другого обработчика, который ТОЛЬКО обрабатывает WARNING и выше, я бы сделал это, а не оставил его по умолчанию.

Смежные вопросы