Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入时间记录器命名与日志配置之间不兼容_Python_Logging_Import - Fatal编程技术网

Python 导入时间记录器命名与日志配置之间不兼容

Python 导入时间记录器命名与日志配置之间不兼容,python,logging,import,Python,Logging,Import,我正在通过读取文件并使用选项在main.py中设置Python日志。我希望能够在测试和实时日志记录配置之间切换,因此我希望首先读入一个单独的配置文件,并从中提取日志记录配置文件路径 这里的问题是,我从main.py导入的其他文件通过log=getLogger(\uuu name\uuu)获取它们自己的记录器,这在导入时发生。当加载新配置时,这些链接就会断开,并且这些模块最终没有按照我预期的方式运行日志记录 如果不进行大量重构,我很难延迟这些模块的导入,因此有没有其他方法可以保持这种按模块名称设置

我正在通过读取文件并使用选项在main.py中设置Python日志。我希望能够在测试和实时日志记录配置之间切换,因此我希望首先读入一个单独的配置文件,并从中提取日志记录配置文件路径

这里的问题是,我从main.py导入的其他文件通过
log=getLogger(\uuu name\uuu)
获取它们自己的记录器,这在导入时发生。当加载新配置时,这些链接就会断开,并且这些模块最终没有按照我预期的方式运行日志记录


如果不进行大量重构,我很难延迟这些模块的导入,因此有没有其他方法可以保持这种按模块名称设置日志的方法,而稍后仍加载到日志配置中?

我不确定您的问题到底是如何破坏的,但下面是我的看法。执行
log=logging.getLogger(\uuuu name\uuuuu)
的各种模块将具有其记录器的有效名称(logger name=package name),除非您以某种方式实际将模块移动到其他包位置

在导入时,日志记录配置可能已设置,也可能未设置,并且不应该有任何实际的日志记录调用作为导入的副作用(如果有,消息可能无处可去)

使用
fileConfig
加载新配置通常只设置记录器上的处理程序、格式化程序和级别

当您随后在导入的模块中调用代码时,它们会通过日志记录器进行日志记录,日志记录器中的处理程序与您之前的配置调用相关联,因此它们会根据配置进行输出


您应该知道,在较早版本的Python上(在加载配置文件之前,我会尝试查看已初始化的记录器的
handlers
属性,并将其清除(例如分配空列表)。这是禁用现有记录器的问题。我没有注意到该参数,它正在关闭以前分配的所有记录器。