如何在Python应用程序中全程使用同一个logging对象?
Python多文件项目中统一使用logging的方法
你对logging模块的核心逻辑理解没问题,但其实logging模块本身就帮你解决了跨文件共享logger的问题——它内部是基于名称的单例机制,不需要手动传递logger对象。
具体做法:
第一步:在项目入口做一次全局配置
比如在main.py里完成日志的级别、格式、输出目标等配置,只需要做一次:import logging # 全局配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('app.log'), # 输出到文件 logging.StreamHandler() # 输出到控制台 ] )第二步:在其他文件直接获取同名logger
不管是子模块的函数、类还是方法里,只要调用logging.getLogger('mylogger'),拿到的就是和入口文件完全相同的logger实例,不需要任何传递操作:# 子模块utils.py import logging logger = logging.getLogger('mylogger') def process_data(): logger.info('数据处理开始') # 业务代码...# 子模块models.py中的类 import logging logger = logging.getLogger('mylogger') class Order: def submit(self): logger.debug('订单提交操作') # 业务逻辑...
补充说明
- 如果想让日志更清晰区分来源,也可以用模块名作为logger名称(
logging.getLogger(__name__)),但如果需要完全统一的logger,固定名称是最直接的方式。 - 注意不要在多个文件重复配置日志,全局只需要配置一次,其他文件只负责获取logger并使用。
内容的提问来源于stack exchange,提问作者quantum231
相关产品推荐
相关产品推荐

