从日志模块记录sys.stdout来

问题描述 投票:0回答:2

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

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消息一样。怎么会?

python logging python-logging
2个回答
1
投票

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

你需要setLevellogger本身也是如此,它的级别(默认警告)将不会允许它的处理程序的消息比在母记录器设置较低的水平。

处理器是有来过滤消息。


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

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.