从模块记录器登录到sys.stdout

时间:2019-01-28 03:56:40

标签: python logging python-logging

我有以下简单的测试脚本:

import logging
import sys


logger = logging.getLogger(__name__)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'$
logger.addHandler(handler)


logger.info('Hello World!')
logger.warning('Bad!')

我在命令行中使用python test.py运行此脚本。我得到:

__main__ - WARNING - Bad!

当我期望得到的时候:

__main__ - WARNING - Bad!
__main__ - INFO - Hello World!

例如我希望infowarning日志消息都可以打印到控制台窗口,但是只有warning消息可以。怎么会来?

2 个答案:

答案 0 :(得分:2)

这应该起作用吗?

import logging
import sys


logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter('%(name)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)


logger.info('Hello World!')
logger.warning('Bad!')

您应该在setLevel对象上设置logger

谢谢

答案 1 :(得分:1)

我认为here包含答案。

您还需要在setLevel本身上logger,其级别(默认警告)将不允许来自其处理程序的消息的级别低于在父记录器中设置的消息。

处理程序在那里可以过滤消息。