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

如何结合自定义Logger类使用getLogger方法?

规范实现自定义Logger类的方法

要让logging.getLogger()返回自定义的Logger类实例,正确的做法是使用logging.setLoggerClass()方法,而非setDefaultClass(后者是Handler类的方法,用于设置默认处理器类,和Logger无关)。具体步骤如下:

1. 定义自定义Logger类

继承标准库的logging.Logger,重写需要自定义的方法(如info、error):

import logging

class CustomLogger(logging.Logger):
    def info(self, msg, custom_param=None, *args, **kwargs):
        # 添加自定义参数处理逻辑
        if custom_param is not None:
            msg = f"[自定义参数: {custom_param}] {msg}"
        # 调用父类的info方法完成日志输出
        super().info(msg, *args, **kwargs)

    def error(self, msg, custom_code=None, *args, **kwargs):
        if custom_code is not None:
            msg = f"[错误码: {custom_code}] {msg}"
        super().error(msg, *args, **kwargs)

2. 全局设置默认Logger类

必须在第一次调用logging.getLogger()之前执行这个设置,确保后续所有获取的Logger实例都是自定义类:

# 在程序初始化阶段(比如主模块开头)设置
logging.setLoggerClass(CustomLogger)

3. 在任意模块中使用自定义Logger

之后在任何模块调用getLogger(),返回的都是CustomLogger实例,可以直接使用自定义参数:

# 其他模块中
import logging

logger = logging.getLogger(__name__)
logger.info("测试日志", custom_param="TEST_001")
logger.error("错误日志", custom_code=500)

注意事项

  • 如果在设置setLoggerClass()之前已经调用过getLogger(),已存在的Logger实例仍然是标准Logger类。这种情况下,若要替换已有实例,只能通过修改__class__属性,但这属于非常规操作,不推荐。规范做法是确保在所有日志操作前完成Logger类的设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:30:59