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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:12:03