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

ziy*_*ang 5 python logging

我正在 Windows 下开发 Python 3.4.2。就我而言,

import logging

logger = logging.getLogger('logger')
logger.setLevel(logging.INFO)
logger.info('test')
Run Code Online (Sandbox Code Playgroud)

控制台上什么也不显示。但

import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('logger')
logger.info('test')
Run Code Online (Sandbox Code Playgroud)

成功显示

INFO:logger:test
Run Code Online (Sandbox Code Playgroud)

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

unu*_*tbu 3

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

Handler有很多种。StreamHandler 打印到控制台,但也有 FileHandler、SocketHandler 和 SMTPHandler 等。如果您不指定任何处理程序,则不会处理记录并且不会发出任何内容。


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

import logging

logger = logging.getLogger('logger')
logger.setLevel(logging.INFO)
console = logging.StreamHandler()
logger.addHandler(console)
logger.info('test')
Run Code Online (Sandbox Code Playgroud)

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

logging.root.addHandler(console)
Run Code Online (Sandbox Code Playgroud)

通过在根记录器上设置处理程序,StreamHandler 可以处理由其他记录器生成的记录,而不仅仅是logger. 请参阅日志记录流程图以了解何时发生这种情况。