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

如何配置Logger.conf实现Python多日志器分级日志输出

Python多日志器统一配置实现方案

你可以直接使用Python标准库logging模块原生支持的ini格式编写Logger.conf,无需安装第三方依赖,所有脚本统一加载该配置文件即可实现需求。


编写Logger.conf配置文件

在项目根目录新建Logger.conf,写入以下内容:

[loggers]
keys=root,log1,log2

[handlers]
keys=h1_file, h1_stream, h2_file, h2_smtp

[formatters]
keys=f1_file, f1_stream, f2_file, f2_smtp

# 根日志器空配置,避免日志重复传播
[logger_root]
level=NOTSET
handlers=

# log1核心配置
[logger_log1]
level=DEBUG
handlers=h1_file, h1_stream
qualname=log1
propagate=0

# log2核心配置
[logger_log2]
level=INFO
handlers=h2_file, h2_smtp
qualname=log2
propagate=0

# log1文件处理器:写入logging.log,级别DEBUG
[handler_h1_file]
class=FileHandler
level=DEBUG
formatter=f1_file
args=('logging.log', 'a', 'utf-8')

# log1控制台处理器:输出到终端,级别WARNING
[handler_h1_stream]
class=StreamHandler
level=WARNING
formatter=f1_stream
args=(sys.stderr,)

# log2文件处理器:追加写入logging.log,级别INFO
[handler_h2_file]
class=FileHandler
level=INFO
formatter=f2_file
args=('logging.log', 'a', 'utf-8')

# log2邮件处理器:CRITICAL级别触发告警邮件
[handler_h2_smtp]
class=handlers.SMTPHandler
level=CRITICAL
formatter=f2_smtp
# 参数顺序:SMTP服务器地址、发件人邮箱、收件人列表、邮件标题、(SMTP账号, SMTP授权码)
args=('替换为你的SMTP服务器地址', '替换为发件人邮箱', ['hello123@gmail.com','billyyes@gmail.com'], '系统严重日志告警', ('替换为SMTP登录账号', '替换为SMTP授权码'))

# log1文件日志格式
[formatter_f1_file]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%B-%d-%Y %H:%M:%S

# log1控制台日志格式
[formatter_f1_stream]
format=%(name)s - %(levelname)s - %(message)s

# log2文件日志格式
[formatter_f2_file]
format=%(name)s : %(message)s

# log2邮件日志格式
[formatter_f2_smtp]
format=%(levelname)s - %(message)s

各脚本加载配置

注意原示例代码中两处笔误需要修正:

  1. 日志打印方法为小写:logger.DEBUG() 应改为 logger.debug(),其余INFO/WARNING/ERROR/CRITICAL同理改为小写
  2. 格式化字段%(asctimes)为笔误,标准字段为%(asctime)s,上述配置已修正

script1.py(使用log1)

import logging
import logging.config

# 加载统一日志配置
logging.config.fileConfig('Logger.conf', encoding='utf-8')
logger = logging.getLogger('log1')

# 原有日志打印代码
logger.debug("hi this is a debug msg")
logger.info("hi this is an info msg")
logger.warning("hi this is a warning msg")
logger.error("hi this is an error msg")
logger.critical("hi this is a critical msg")

script2.py、script3.py(使用log2)

import logging
import logging.config

# 加载统一日志配置
logging.config.fileConfig('Logger.conf', encoding='utf-8')
logger = logging.getLogger('log2')

# 原有日志打印代码
logger.debug("hi this is a debug msg")
logger.info("hi this is an info msg")
logger.warning("hi this is a warning msg")
logger.error("hi this is an error msg")
logger.critical("hi this is a critical msg")

配置说明

  • 两个业务日志器均设置propagate=0,阻止日志向上传递到根日志器,避免重复打印
  • 两个日志器的文件处理器均以追加模式写入同一个logging.log文件,按脚本运行顺序先写入log1的所有DEBUG及以上级别日志,再追加log2的INFO及以上级别日志,和预期输出顺序完全一致
  • 控制台处理器仅绑定在log1上,级别设为WARNING,因此控制台只会输出log1的WARNING、ERROR、CRITICAL级别日志,不会出现log2的日志
  • 邮件处理器仅绑定在log2上,级别设为CRITICAL,只有log2触发CRITICAL级别日志时才会发送告警邮件,log1的所有日志都不会触发邮件
  • SMTP处理器参数需要替换为实际的邮箱服务配置,例如Gmail的SMTP地址为smtp.gmail.com、QQ邮箱为smtp.qq.com,授权码需要在邮箱后台开启SMTP服务后获取,否则无法正常发送邮件
  • 默认配置下日志时间的月份为首字母大写格式(如July),如果需要和示例一致的全大写月份(如JULY),可以自定义Formatter类重写时间格式化逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:42:22