python - logger.setLevel(logging.INFO) 不会使 logger.info() 可见

标签 python logging

我正在 Windows 下使用 Python 3.4.2。就我而言,

import logging

logger = logging.getLogger('logger')
logger.setLevel(logging.INFO)
logger.info('test')

在控制台上没有显示任何内容。但是

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('logger')
logger.info('test')

成功展示

INFO:logger:test

我预计 logger.setLevel(logging.INFO) 将允许与第二个代码片段中相同的打印输出,其中记录器级别由根记录器控制,但事实并非如此。那么问题出在哪里呢?谢谢。

最佳答案

您需要向记录器添加一个处理程序。调用 basicConfig 是实现此目的的一种方式。

many kinds of Handlers . StreamHandler 打印到控制台,但也有 FileHandlers、SocketHandlers 和 SMTPHandlers,例如。如果您不指定任何处理程序,则不会处理记录,也不会发出任何内容。


要添加 StreamHandler(无需调用 basicConfig),您可以使用:

import logging

logger = logging.getLogger('logger')
logger.setLevel(logging.INFO)
console = logging.StreamHandler()
logger.addHandler(console)
logger.info('test')

这会将 StreamHandler 添加到名为 logger 的记录器中。要将处理程序添加到根记录器,请使用

logging.root.addHandler(console)

通过在根记录器上设置处理程序,StreamHandler 可以处理由其他记录器生成的记录,而不仅仅是 logger。咨询the logging flow diagram获取发生这种情况的照片。


关于python - logger.setLevel(logging.INFO) 不会使 logger.info() 可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075381/

相关文章:

python - Sphinx 和 argparse - 自动记录命令行脚本?

python - 有没有办法获取猎豹模板中所有占位符的列表

python - 将句子 include some text 替换为 Python 正则表达式

python - 如何检测一个是否在 Python 的 docker 容器中运行?

logging - 如何在 Spring Boot 中使用 logback 和 SLF4J 的 MDC 来捕获 POST 请求 json 中的唯一跟踪?

java - SimpleFormatter dd.mm.yyyy HH :mm:ss

python - 将上三角矩阵转换为对称矩阵的快速方法

java - log4j - 在文件和控制台中显示日志

ruby - 在 Ruby 中自动记录异常

logging - Chef::Log.info 到底做了什么