首页 > 解决方案 > 如何仅为所有导入的模块创建单独的记录器

问题描述

我有一个 python 脚本,它有一个记录器logger = logging.getLogger(__name__)

我在脚本中导入了许多模块(例如:kiteconnect)。我希望为所有导入的模块有一个单独的记录器。就像是import_logger = logging.getLogger(**all_modules_excluding__name__**)

我希望为模块(我在里面)和模块(我已经导入)有单独的记录器

我怎样才能做到这一点?

提前致谢

标签: pythonlogging

解决方案


如果您不控制模块的源代码,则无法阻止它们创建自己的具有不同名称的记录器。然而,有一个功能可以帮助您:记录器是分层的,除非没有明确关闭它们的传播,否则它们都会将它们的日志发送到根记录器。所以实际上根记录器将拥有来自所有模块的所有日志。如果您在应用程序记录器上打开传播,您的应用程序日志将有效地记录在该记录器上,并且所有模块都记录在根记录器中。您可能仍然需要让各个模块记录器来设置它们的级别。在代码中,它看起来像这样:

import logging
#import modules here

import_logger = logging.getLogger()
import_logger.addHandler(logging.StreamHandler()) # use any handler you want

logger = logging.getLogger(__name__)
logger.propagate = False

推荐阅读