logging.getLogger(__name__)默认继承不起作用



我有一个具有以下层次结构的项目:

ModuleA:
- __main__.py
- ModuleB:
- __init__.py
- auxiliary.py

使用logger应该非常简单。正如官方文件和本网站其他一些答案所示。但并没有如预期的那样发挥作用。

__main__.py上,我有

import logging
import logging.config
if __name__ == '__main__':
#Initialize logging
logging.config.fileConfig(fname='FILE.ini')
logger = logging.getLogger(__name__)  
logger.info('The APP has started')
logger.debug('This goes to the logfile')

__init__.py中,我有

#Imports from all the modules
#[...]
import logging
logger = logging.getLogger(__name__)
logger.info("Package loaded")

auxiliary.py中我有

import logging
class Auxiliar:
logger = logging.getLogger(__name__) 
def __init__(self):
pass
def work(self):
self.logger.info("From inside AUTH")

但这并没有像预期的那样工作,我从__main__.py得到了所有的消息,但没有从__init__.py或auxiliary.py得到任何消息。我也尝试过只从auxiliary而不是__init__得到记录器,结果相同。唯一的方法是,如果我让getLogger((为空,以获得两者上的根记录器,但这并不理想,因为模块的名称总是";根";而不管从哪里记录事件。

我无法理解我在这里错过了什么。

作为一种变通方法,可以使用显式记录器名称声明,正确的配置应如下所示:

关于__main__.py:

import logging
import logging.config
if __name__ == '__main__':
#Initialize logging
logging.config.fileConfig(fname='FILE.ini')
logger = logging.getLogger('application')  
logger.info('The APP has started')
logger.debug('This goes to the logfile')

在CCD_ 8中不需要任何东西。

auxiliary.py:中

import logging
module_logger = logging.getLogger('application.auxiliary')
class Auxiliar:
self.logger = logging.getLogger('application.auxiliary.Auxiliar') 
def __init__(self):
pass
def work(self):
self.logger.info("From inside Auxiliar clase")

通过这种方式,日志将显示正确的模块层次结构,但程序员必须控制正确的命名约定。

最新更新