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级别日志)。
解决步骤
- 移除默认处理器:在添加自定义处理器前,调用
logger.remove()清除默认配置,确保只有你定义的处理器生效。 - 重新添加自定义处理器:
修改后的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
相关产品推荐
相关产品推荐

