Python:logging.streamhandler未向标准输出发送日志

Python:logging.streamhandler未向标准输出发送日志,python,logging,Python,Logging,我想使用python的StreamHandler日志处理程序。 我试过的是 import logging import sys mylogger = logging.getLogger("mylogger") h1 = logging.StreamHandler(stream=sys.stdout) h1.setLevel(logging.DEBUG) mylogger.addHandler(h1) # now trying to log with the created logger my

我想使用python的StreamHandler日志处理程序。 我试过的是

import logging
import sys
mylogger = logging.getLogger("mylogger")
h1 = logging.StreamHandler(stream=sys.stdout)
h1.setLevel(logging.DEBUG)

mylogger.addHandler(h1)

# now trying to log with the created logger
mylogger.debug("abcd") # <no output>
mylogger.info("abcd") # <no output>
mylogger.warn("abcd") # abcd
导入日志
导入系统
mylogger=logging.getLogger(“mylogger”)
h1=logging.StreamHandler(stream=sys.stdout)
h1.setLevel(logging.DEBUG)
mylogger.addHandler(h1)
#现在尝试使用创建的记录器进行日志记录
mylogger.debug(“abcd”)#
mylogger.info(“abcd”)#
mylogger.warn(“abcd”)#abcd
我错过什么了吗?还是做错了什么?
为什么信息和调试级别日志没有出现在标准输出上?

您必须设置日志的级别,而不仅仅是处理程序的级别:

mylogger.setLevel(logging.DEBUG)
下面是一个很好的日志工作流程图,您可以看到日志记录器和处理程序检查日志级别:

默认的
logLevel
WARNING
,因此即使您将处理程序的级别设置为
DEBUG
,消息也不会通过,因为您的记录器会抑制它(默认情况下也是
WARNING

顺便说一下,您可以使用
Formatter
进行一些基本格式化:

import logging
import sys

mylogger = logging.getLogger("mylogger")

formatter = logging.Formatter('[%(levelname)s] %(message)s')

handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
handler.setLevel(logging.DEBUG)

mylogger.addHandler(handler)
mylogger.setLevel(logging.DEBUG)

mylogger.debug("This is a debug message.")
mylogger.info("Some info message.")
mylogger.warning("A warning.")
我会给你输出的

[DEBUG] This is a debug message.
[INFO] Some info message.
[WARNING] A warning.

“我在看一些基本的文档,”医生说。这个文档错了吗?不,它没有错,正如您在日志记录程序中看到的,它在检查级别后将日志记录调用传递给它的处理程序。因此,如果记录器的级别设置为
WARN
,并且出现
DEBUG
消息,则不会有任何消息通过。如果消息通过,记录器将其交给处理程序,处理程序也有一个日志类型“filter”。