我想使用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
我错过了什么吗?或者做错了什么? 为什么INFO和DEBUG级别日志不会出现在STDOUT上?
答案 0 :(得分:30)
您必须设置记录器的级别,而不仅仅是处理程序的级别:
mylogger.setLevel(logging.DEBUG)
这是一个很好的日志记录工作流程图,您可以看到记录器和处理程序检查日志级别:
http://docs.python.org/2/howto/logging.html#logging-flow
默认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.