python - 日志记录模块:StreamHandler 似乎没有附加到记录器
问题描述
我正在学习 Python 的日志记录模块,但我不知道为什么我不能记录 DEBUG 和 INFO 消息。这是代码(python 2.7):
import logging
if __name__ == "__main__" :
logger = logging.getLogger("test")
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.DEBUG)
logger.addHandler(c_handler)
# test
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
这导致了这个输出
This is a warning message
This is an error message
This is a critical message
我希望这个输出
This is a debug message
This is an info message
This is a warning message
This is an error message
This is a critical message
看起来 c_handler.setLevel(logging.DEBUG) 不起作用,记录器使用其默认设置。默认情况下,它不会记录 DEBUG 和 INFO 日志。
我究竟做错了什么?
解决方案
文档中的这张图(见下文)有助于解释日志记录的工作原理。注意顶部附近的两颗钻石。“记录器流”菱形检查“为调用级别启用记录器”,而“处理程序流”菱形检查“为 LogRecord 级别启用处理程序”。这暗示了记录器和处理程序都具有日志记录级别的事实。
要记录 DEBUG 级别记录,请将记录器的级别设置为 DEBUG(以及将处理程序级别设置为 DEBUG):
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)
import logging
if __name__ == "__main__" :
logger = logging.getLogger("test")
logger.setLevel(logging.DEBUG)
c_handler = logging.StreamHandler()
c_handler.setLevel(logging.DEBUG)
logger.addHandler(c_handler)
# test
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
印刷
This is a debug message
This is an info message
This is a warning message
This is an error message
This is a critical message
推荐阅读
- unix - Jenkins、Ubuntu 节点和从属构建未能将项目保存到临时文件夹
- jetty - 有没有办法通过浏览器访问码头服务器日志?
- vue.js - 开发时是否可以在 Vue 中跟踪源样式定义(sass、scss)?
- android - 所有活动的相同工具栏 - 我缺少的东西
- django - Django 模板和版本
- javascript - 如何为 reactjs 配置媒体资产和字体的 webpack
- laravel - 获取除 created_at 和 updated_at 列之外的所有列
- react-native - 无法在本机反应中将arraylist传递给本机模块库
- ruby - Shopify 自定义运输脚本 - 删除特定产品的运费
- javascript - 使用 morris.js 从图表上的网格中删除标签文本