You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Logger切换为DEBUG级别后无输出,INFO正常,求排查解决

问题原因及解决方案

你的问题出在子logger的级别未显式设置:尽管你通过logging.basicConfig把root logger的级别设为了DEBUG,但你创建的logger = logging.getLogger(__name__)这个子logger默认级别是NOTSET,理论上它会继承root的级别,但在你清空root的handler后,继承机制可能出现异常,导致子logger的有效级别被默认设为INFO,从而过滤掉了DEBUG级别的日志。

解决步骤

给你的子logger显式设置DEBUG级别即可,添加一行代码:

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # 显式设置logger级别

完整修正后的代码示例

import logging

logging.basicConfig(level=logging.DEBUG, filename="logging.log", filemode='w', format="%(levelname)s - %(message)s")

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)  # 新增:显式设置logger级别

handler = logging.StreamHandler()
file_handler = logging.FileHandler('logging.log')

formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")
file_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")

handler.setFormatter(formatter)
file_handler.setFormatter(file_formatter)

logging.getLogger().handlers.clear()
logger.addHandler(handler)
logger.addHandler(file_handler)


if __name__ == '__main__':
    
    logger.debug("App Initiated")
    run_ui()

额外说明

  • 每个logger实例都有独立的级别过滤规则,显式设置级别可以避免继承机制带来的意外问题。
  • 若希望所有子logger统一继承root的级别,需确保root的级别未被其他代码修改,同时子logger的propagate属性保持默认的True,但显式设置子logger级别是更稳妥的做法。

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:02:55