繁体   English   中英

Python - 如何通过日志记录配置文件配置子记录器

[英]Python - how do I configure a child logger via a logging configuration file

我有一个包含一系列模块的 Python 包,每个模块都包含一个具有中心焦点的例程库(即一个模块可能具有与文本操作相关的例程)。 我希望能够为整个包配置日志记录,但让用户能够自定义给定模块的日志记录。

我尝试使用父/子记录器来完成此操作,以便每个模块不必拥有超过 1 个记录器。 如果我在模块本身中配置子记录器,我可以成功使用父/子方法,但是我找不到通过记录器配置文件配置子记录器的正确语法。 当 Python 日志实用程序读入配置文件时,它会阻塞任何包含点符号的记录器“键”(即,如果我尝试定义记录器“root、parent、parent.child”,则配置文件的摄取将阻塞在“ parent.child”键)。

因此,我正在寻找一种解决方案,其中给定的模块只需要一个记录器,但用户可以以一种方式为整个包配置日志记录,但为特定模块配置不同的方式。 父/子方法似乎是最有前途的。

如果模块有办法确定日志管理器定义了哪些记录器,我也可以使用它。 例如,假设我可以在名为 allUtil 和 textUtil 的日志配置文件中定义两个记录器。 如果文本实用程序模块可以确定日志管理器是否定义了 textUtil 记录器,则它可以使用该记录器,否则它将使用 allUtil 记录器。 不幸的是,我也无法找出正确的 Python 代码来执行此操作。

我愿意接受建议。

这是我想出的似乎有效的方法。

设置:

  • 我有一个名为“myapp”的应用程序
  • 我有一个叫做“utils”的包
  • 我在包“utils”中有一个名为“miscUtils”的模块

在日志配置文件中,我有以下内容(仅显示相关内容)

[loggers]
keys=root,myapp,utils,miscUtils
.
.
.
[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_myapp]
level=CRITICAL
handlers=consoleHandler
qualname=myapplogger
propagate=0

[logger_utils]
level=WARNING
handlers=consoleHandler
qualname=myapplogger.utils
propagate=1

[logger_miscUtils]
level=DEBUG
handlers=consoleHandler
qualname=myapplogger.utils
propagate=1
.
.
.
  • 在 utils.miscUtils.py 模块中,我使用记录器“myapplogger.utils.misc”。
  • 在“utils”包中的所有其他模块中,它们使用记录器“myapplogger.utils.xxx”,其中 xxx 代表特定模块。
  • 在主程序模块 myapp.py 中,我使用记录器“myapplogger”,但我将其级别明确设置为 INFO。

当我运行程序时,来自主模块问题的日志消息会记录来自 INFO 的消息。 除了 miscUtils.py 之外的所有 'utils' 模块都会记录来自 WARNING 的消息。 但是,从使用记录器“myapplogger.utils.miscUtils”的模块 miscUtils.py 生成的所有日志消息都会从 DEBUG 向下发出日志消息。

通过配置文件,我现在可以根据需要定义整体程序日志级别、包日志级别和模块日志级别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM