我有一个Python包,其中包含一系列模块,每个模块都包含一个具有中心焦点的例程库(即一个模块可能具有与文本操作相关的例程)。我希望能够为整个软件包配置日志记录,但是让用户能够自定义给定模块的日志记录。
我尝试使用父/子记录器完成此操作,以便每个模块不必具有多于1个记录器。如果我在模块本身配置子记录器,我可以成功使用父/子方法,但是我找不到通过记录器配置文件配置子记录器的正确语法。当Python日志记录实用程序读入配置文件时,它会在包含点表示法的任何记录器“键”上窒息(即,如果我尝试定义记录器" root,parent,parent.child"配置文件的摄取将扼杀" parent.child" key)。
因此,我正在寻找一种解决方案,即给定模块只需要一个记录器,但用户可以单向配置整个包的记录,但对于特定模块则采用不同的方式。父母/子女方法似乎最有希望。
如果模块有办法确定日志记录管理器有哪些记录器的定义,我也可以使用它。例如,假设我可以在名为allUtil和textUtil的日志记录配置文件中定义两个记录器。如果文本实用程序模块可以确定日志记录管理器是否定义了textUtil记录器,则可以使用该文件管理器,否则它将使用allUtil记录器。不幸的是,我无法找到正确的Python代码来执行此操作。
我愿意接受建议。
UND
答案 0 :(得分:0)
以下是我想出来的效果。
设置:
在日志配置文件中,我有以下内容(仅显示相关内容)
[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
.
.
.
[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
.
.
.
当我运行程序时,来自主模块的日志消息会发出来自INFO的日志消息。所有' utils'模块,但miscUtils.py,将从警告开始记录消息。但是,从模块miscUtils.py生成的所有日志消息都使用了logger' myapplogger.utils.miscUtils'从DEBUG发出日志消息。
通过配置文件,我现在可以根据需要定义整体程序日志级别,包日志级别和模块日志级别。