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

Python2.7同项目多脚本如何共用统一logging日志配置

实现方法

1. 把日志配置封装到公共模块

假设你的公共模块命名为 common.py,将原有日志配置逻辑封装为可调用的函数,同时增加重复handler过滤逻辑,避免多次导入时重复添加handler导致日志重复输出:

from datetime import datetime
import logging
from logging import handlers

def get_logger():
    dt_now = datetime.today().strftime('%Y%m%d')
    sender = 'sender@domainname.com'
    recipients ='recipient@domainname.com'
    sub_err = "Process Failed"

    # 日志文件路径
    log_file = "//some_server/some_dir/another_dir/logs/{}.txt".format(dt_now)
    # 用固定名称获取logger实例,保证全局唯一
    logger = logging.getLogger("global_biz_logger")
    # 避免重复添加handler
    if logger.handlers:
        return logger
    
    logger.setLevel(logging.DEBUG)
    # 配置各handler
    file_handle = logging.FileHandler(log_file, encoding="utf-8")
    stream_handle = logging.StreamHandler()
    email_handle = handlers.SMTPHandler(
        mailhost="mailhost.domain.com",
        fromaddr=sender,
        toaddrs=recipients,
        subject=sub_err,
        secure=None
    )
    # 设置各handler日志级别
    email_handle.setLevel(logging.WARNING)
    file_handle.setLevel(logging.DEBUG)
    stream_handle.setLevel(logging.DEBUG)
    # 统一日志格式
    log_format = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    handles = [email_handle, file_handle, stream_handle]
    for handle in handles:
        handle.setFormatter(log_format)
        logger.addHandler(handle)
    return logger

2. 业务脚本使用方式

所有业务脚本不需要再复制日志配置代码,只需要导入公共模块的get_logger函数即可直接使用:

from common import get_logger

logger = get_logger()

# 正常打印日志,会同时输出到控制台、写入日志文件
logger.debug("调试信息")
logger.info("普通业务日志")
# WARNING及以上级别的日志会额外触发告警邮件
logger.warning("警告信息")
logger.error("错误信息")

注意事项

  • 所有脚本调用get_logger获取的是同一个单例logger实例,会将日志写入同一个按当天日期命名的日志文件
  • 后续如果需要修改日志路径、收件人、邮件主题等配置,只需要修改公共模块中的get_logger函数一处即可,所有业务脚本自动生效
  • 增加的handler存在性判断可以避免多次导入时日志重复输出的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:06:03