logging.getLogger(__name__) 默认继承不起作用
logging.getLogger(__name__) default inheritance not working
我有一个具有以下层次结构的项目:
ModuleA:
- __main__.py
- ModuleB:
- __init__.py
- auxiliary.py
使用记录器应该非常简单。如官方文档以及本网站的其他一些答案所示。但是没有按预期工作。
在__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 收到 none。我也试过只从辅助而不是 __init__
获取记录器,结果相同。如果我将 getLogger() 留空以获取两者的根记录器,这是唯一的方法,但这并不理想,因为无论从何处记录事件,模块的名称始终是“root”。
我不明白我在这里错过了什么。
作为一种解决方法,可以使用显式记录器名称声明,正确的配置应如下所示:
在 __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')
在 __init__.py
中不需要任何内容。
在 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")
这样日志将显示正确的模块层次结构,但程序员必须控制正确的命名约定。
我有一个具有以下层次结构的项目:
ModuleA:
- __main__.py
- ModuleB:
- __init__.py
- auxiliary.py
使用记录器应该非常简单。如官方文档以及本网站的其他一些答案所示。但是没有按预期工作。
在__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 收到 none。我也试过只从辅助而不是 __init__
获取记录器,结果相同。如果我将 getLogger() 留空以获取两者的根记录器,这是唯一的方法,但这并不理想,因为无论从何处记录事件,模块的名称始终是“root”。
我不明白我在这里错过了什么。
作为一种解决方法,可以使用显式记录器名称声明,正确的配置应如下所示:
在 __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')
在 __init__.py
中不需要任何内容。
在 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")
这样日志将显示正确的模块层次结构,但程序员必须控制正确的命名约定。