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

Loguru多处理器多级别日志配置异常:日志未按预期分流

问题原因及解决方法

你的问题出在没有移除Loguru默认的日志处理器,同时对处理器级别过滤逻辑的实际生效场景存在误解。

具体原因

Loguru初始化时会自动添加一个默认的stderr处理器,级别为DEBUG。你的代码中额外添加了一个stderr处理器和一个文件处理器,此时实际存在三个日志处理器:

  • 默认stderr处理器(DEBUG级别,输出所有DEBUG及以上日志)
  • 你添加的stderr处理器(DEBUG级别)
  • 你添加的文件处理器(INFO级别,本应只输出INFO及以上日志)

你看到的"两个处理器均输出DEBUG和INFO",大概率是默认处理器与你添加的stderr处理器重复输出了DEBUG日志,而文件处理器其实并没有输出DEBUG日志(可以直接检查logs/file1.log的内容,应该只有Start fn和Finishes fn两条INFO级别日志)。

解决步骤

  1. 移除默认处理器:在添加自定义处理器前,调用logger.remove()清除默认配置,确保只有你定义的处理器生效。
  2. 重新添加自定义处理器:

修改后的app.py代码如下:

import sys
from loguru import logger
from my_module import my_function

# 移除默认的日志处理器
logger.remove()
# 添加stderr处理器,接收DEBUG及以上级别日志
logger.add(sys.stderr, level="DEBUG")
# 添加文件处理器,接收INFO及以上级别日志
logger.add("logs/file1.log", level="INFO")

results = my_function()

验证效果

运行修改后的代码后:

  • stderr会输出所有日志:Start fn、Debug message、Finishes fn
  • logs/file1.log中只会保留INFO级别日志:Start fn、Finishes fn

补充说明

Loguru的level参数是处理器的最低接收级别,即该处理器会处理指定级别及以上的日志。比如level="INFO"时,处理器会自动忽略DEBUG级别日志,只处理INFO、WARNING、ERROR、CRITICAL级别的日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:45:02