如何在Python不同模块中访问主模块创建的Logger?能否传递Logger?
Python跨模块使用Logger的两种实现方法
方法一:直接传递Logger实例(完全可行)
你可以在调用get_status函数时,把主模块创建好的Logger实例作为参数传入,这是最直接的实现方式。
各文件代码示例:
- 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
- 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()
- 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
相关产品推荐
相关产品推荐

