Python

Python日志级别设置与输出控制

在 Python 的 logging 模块中,日志级别设置决定了不同严重程度的日志消息是否会被实际输出。以下是关键概念和关系的详细说明:

  1. 日志级别关系(从低到高)

级别常量 | 数值 | 方法 | 说明

DEBUG | 10 | log.debug() | 调试细节(开发阶段使用)
INFO | 20 | log.info() | 程序正常运行信息
WARNING | 30 | log.warning() | 潜在问题警告(默认级别)
ERROR | 40 | log.error() | 严重错误(功能部分失效)
CRITICAL | 50 | log.critical() | 致命错误(程序可能崩溃)

  1. 日志能否打印的核心规则

一条日志消息能否输出取决于:

Logger 的级别设置

Handler 的级别设置

消息必须同时满足:

python
日志消息级别 >= Logger设置级别

日志消息级别 >= Handler设置级别

  1. 配置层级与影响

(1) Logger 级别(核心过滤器)

import logging
logger = logging.getLogger("my_logger")
logger.setLevel(logging.INFO)  # 关键设置!

作用:全局过滤低级别消息。

示例:

若设为 INFO:DEBUG 消息会被 丢弃,INFO 及以上会传递到 Handler。

(2) Handler 级别(最终输出控制)

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)  # 控制台只输出 WARNING 以上

file_handler = logging.FileHandler("app.log")
file_handler.setLevel(logging.DEBUG)  # 文件记录所有 DEBUG 以上

作用:精细化控制不同输出目标的级别。

典型场景:

控制台只显示 WARNING+

文件记录 DEBUG+ 完整日志

  1. 默认行为

未显式设置时:

Logger 默认级别:WARNING (30)

内置的 StreamHandler 默认级别:NOTSET (0),即不额外过滤

  1. 实际输出判断流程

2025-07-22T12:28:29.png

  1. 示例场景
import logging

# 配置 Logger
logger = logging.getLogger("example")
logger.setLevel(logging.INFO)  # 全局过滤 DEBUG

# 配置 Handler(控制台输出)
console = logging.StreamHandler()
console.setLevel(logging.WARNING)  # 控制台只显示 WARNING+

logger.addHandler(console)

# 测试日志
logger.debug("Debug 消息")   # 被 Logger 过滤(INFO < DEBUG? 不成立)
logger.info("Info 消息")     # 通过 Logger,但被 Handler 过滤(INFO < WARNING)
logger.warning("警告消息")   # 输出到控制台
logger.error("错误消息")     # 输出到控制台
  1. 关键结论

双重过滤:Logger 级别做粗粒度过滤,Handler 级别做细粒度控制。

级别继承:未显式设置时,Logger 会继承父 Logger 的级别。

NOTSET 特殊值:若设置为 NOTSET,Logger/Handler 会向上级继承级别(根 Logger 默认为 WARNING)。

最佳实践:

开发环境:Logger 设为 DEBUG + Handler 按需设置

生产环境:Logger 设为 INFO/WARNING + 文件 Handler 存 DEBUG 完整日志

📌 总结:

日志方法(debug()/info()/error())仅生成对应级别的消息

实际输出由 Logger 和 Handler 的级别设置共同决定

需同时配置两者才能精确控制日志输出

回复

  1. kfvdnijkbg
    Sogo 10

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

This is just a placeholder img.