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

Log to sys.stdout from a module logger

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

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 日志消息都打印到控制台 window,但只有 warning 消息打印了。怎么来的?

我认为 What is the point of setLevel in a python logging handler? 包含答案。

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

处理程序用于过滤消息。

这应该有用吗?

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!')

您应该在 logger 对象上设置 setLevel

谢谢