Python:logging.streamhandler不向stdou发送日志

2024-09-29 21:51:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用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

我遗漏了什么吗?或者做错了什么? 为什么STDOUT上没有信息和调试级日志?


Tags: nodebugimport处理程序outputstreamloggingstdout
1条回答
网友
1楼 · 发布于 2024-09-29 21:51:31

您必须设置记录器的级别,而不仅仅是处理程序的级别:

mylogger.setLevel(logging.DEBUG)

下面是一个很好的日志工作流程图,您可以在其中看到日志记录器和处理程序检查日志级别:

http://docs.python.org/2/howto/logging.html#logging-flow

默认的logLevelWARNING,因此即使您将处理程序的级别设置为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.

相关问题 更多 >

    热门问题