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

如何在Python不同模块中访问主模块创建的Logger?能否传递Logger?

Python跨模块使用Logger的两种实现方法

方法一:直接传递Logger实例(完全可行)

你可以在调用get_status函数时,把主模块创建好的Logger实例作为参数传入,这是最直接的实现方式。

各文件代码示例:

  1. my_logger.py(Logger创建模块)
import logging

def create_logger(name="my_app"):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    
    # 配置控制台输出处理器
    handler = logging.StreamHandler()
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    
    return logger
  1. TestCode.py(主模块)
import my_logger
import someother_module

def main():
    # 创建Logger实例
    app_logger = my_logger.create_logger()
    app_logger.info("主模块初始化完成")
    
    # 将Logger实例传递给get_status函数
    someother_module.get_status(app_logger)

if __name__ == "__main__":
    main()
  1. someother_module.py(目标模块)
def get_status(logger):
    logger.debug("开始执行get_status函数")
    # 模拟业务逻辑
    current_status = "运行正常"
    logger.info(f"获取到状态:{current_status}")
    return current_status

方法二:利用logging模块的单例特性获取Logger

Python的logging模块本身是单例设计,只要使用同一个名称调用logging.getLogger(),就能拿到同一个Logger实例,无需手动传递参数。

修改后的someother_module.py

import logging

def get_status():
    # 获取与主模块同名的Logger实例
    logger = logging.getLogger("my_app")
    logger.debug("开始执行get_status函数")
    current_status = "运行正常"
    logger.info(f"获取到状态:{current_status}")
    return current_status

对应的TestCode.py(无需传递参数)

import my_logger
import someother_module

def main():
    app_logger = my_logger.create_logger()
    app_logger.info("主模块初始化完成")
    
    # 直接调用函数,无需传递Logger
    someother_module.get_status()

if __name__ == "__main__":
    main()

两种方法的适用场景

  • 传递实例:适合需要为不同模块配置不同Logger实例(比如不同日志级别、不同输出目标)的场景,灵活性更高。
  • 单例获取:适合全局使用统一Logger配置的场景,代码更简洁,无需在函数间传递参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:45:32