如何让Python中peewee日志仅写入文件不输出到控制台?
解决Peewee日志仅写入文件不输出到控制台的问题
问题核心在于日志传播机制:Peewee的日志器默认会将日志向上传递给根日志器,而你最初调用的logging.basicConfig(level=logging.INFO)会给根日志器自动添加控制台输出处理器,导致日志同时出现在文件和控制台。
你需要做的关键操作是:关闭Peewee日志器的日志传播,同时只为它配置文件处理器。
正确代码示例
import logging _log_format = "[%(asctime)s] %(message)s" # 配置Peewee专属的文件处理器 file_handler = logging.FileHandler('logs/db.log') file_handler.setFormatter(logging.Formatter(_log_format)) # 获取Peewee的日志器实例 peewee_logger = logging.getLogger('peewee') # 添加文件处理器 peewee_logger.addHandler(file_handler) # 设置日志级别 peewee_logger.setLevel(logging.DEBUG) # 关键:关闭日志传播,避免日志流向根日志器的控制台输出 peewee_logger.propagate = False
原理说明
propagate = False:截断Peewee日志的向上传播路径,阻止其被根日志器的控制台处理器处理。- 无需通过
logging.basicConfig配置根日志器(除非项目其他模块确实需要根日志的控制台输出,此时仍需保留peewee_logger.propagate = False)。 - 如果项目中已有其他代码调用过
logging.basicConfig,上述代码依然有效,因为传播开关只作用于Peewee的日志器。
你的尝试未生效的原因
- 第一次代码:未关闭日志传播,Peewee日志被传递给根日志器,通过
basicConfig配置的控制台处理器输出到屏幕。 - 第二次代码:直接配置根日志器写入文件,会将所有模块的日志(包括非Peewee的)都写入目标文件,不符合仅记录Peewee日志的需求。
内容的提问来源于stack exchange,提问作者Arman Craig
相关产品推荐
相关产品推荐

