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 - Fatal编程技术网

Python在模块之间共享记录器配置

Python在模块之间共享记录器配置,python,logging,Python,Logging,我有一个项目包含几个模块,我想登录到同一个位置。我已经设置了一个特定的模块,比如说log.py,在其中我指定了格式规则和希望写入日志的位置 到目前为止,我一直在将我在log.py中创建的记录器导入到需要使用它的模块中,并从那里调用它们,如中所述 现在,我想在导入到的每个模块中更改记录器的名称,以便能够区分特定消息来自哪个模块 最好的方法是什么?我是否应该将我的记录器子类化,并用模块的\uuuu name\uuuuu重新定义记录器的名称?有更好的方法吗 以下是我的记录器定义的一个元素: logge

我有一个项目包含几个模块,我想登录到同一个位置。我已经设置了一个特定的模块,比如说
log.py
,在其中我指定了格式规则和希望写入日志的位置

到目前为止,我一直在将我在
log.py
中创建的记录器导入到需要使用它的模块中,并从那里调用它们,如中所述

现在,我想在导入到的每个模块中更改记录器的名称,以便能够区分特定消息来自哪个模块

最好的方法是什么?我是否应该将我的记录器子类化,并用模块的
\uuuu name\uuuuu
重新定义记录器的名称?有更好的方法吗

以下是我的记录器定义的一个元素:

logger = logging.getLogger('main_logger')
logger.setLevel(logging.DEBUG)
以下是我如何使用它的示例:

from log_behavior import logger as log

[....]
log.info('mymessage')

就我所知,日志配置是持久的,就配置而言,这应该适用于所有子模块

logging.basicConfig(format='%(module)s-%(levelname)s: %(message)s',level=logging.DEBUG)
logger = logging.getLogger('project.logging_behaviour')
更多的格式选项可以在这里找到


我不知道是否有必要,但最好的做法是将记录器命名为与模块完全相同的名称。例如
project.logging\u behavior
project.sub\u module.sub\u sub\u module
等等。

问题是,我首先使用
logging.getLogger('my\u logger')
创建一个记录器,然后配置该记录器。没有它,我无法设置处理程序。我想对该配置进行子分类,只是更改名称,但是在每个模块中调用整个配置例程有点长。我要说的是从日志创建一个全局basicConfig,它应该保存到您创建的日志记录器。只要在每个要登录的模块中导入日志记录,就不需要多次导入日志记录行为。在日志中而不是每个记录器中设置配置应该可以解决这个问题。问题是,对于我来说,basicConfig没有提供足够的选项,所以我必须使用为记录器实例保留的方法。我想最后我会在需要的地方导入一个日志生成函数。在basicConfig中需要什么设置?您只要求输入日志模块名称?选中此处查看basicConfig中的不同选项。