Python 记录器不打印信息

use*_*311 4 python logging

查看 python 文档,如果我将记录器级别设置为 INFO,它应该打印出级别为 INFO 及更高级别的所有日志。

但是,下面的代码截图只打印“错误”

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info("Info")
logger.error("error")
logger.info("info")
Run Code Online (Sandbox Code Playgroud)

输出

error
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?

小智 16

出现此行为的原因是没有定义日志记录处理程序。在这种情况下,使用处理程序“logging.lastResort”。默认情况下,该处理程序为“<_StderrHandler (WARNING)>”。它记录到 stderr,但仅从“警告”级别开始。

对于您的示例,您可以执行以下操作(记录到标准输出):

import logging
import sys
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler(sys.stdout))
logger.info("info")
Run Code Online (Sandbox Code Playgroud)

输出

info
Run Code Online (Sandbox Code Playgroud)

操作指南中,您可以找到其他有用的处理程序。

  • 该回复正确地指出,当调用 Logger 的新实例时,还必须指定一个处理程序,这在接受的答案中没有解释。 (4认同)

Ben*_*Ben 10

使用logging.basicConfig设置默认级别和默认的处理程序:

import logging

logger = logging.getLogger()
logging.basicConfig(level=logging.INFO)

logger.info("Info")
logger.error("error")
logger.info("info")
Run Code Online (Sandbox Code Playgroud)

印刷:

INFO:root:Info
ERROR:root:error
INFO:root:info
Run Code Online (Sandbox Code Playgroud)

logging模块功能强大但令人困惑。查看文档中的 HOWTO以获取教程。我已经创建了自己的帮助函数,该函数可以记录到 stderr 以及我在博客中详细介绍的文件。您可能希望使其适应您的需求。