我正在尝试在我的项目中实现日志记录,并希望所有模块都记录到同一个文件中。如果我在init 中设置记录器,我设法让它工作,但如果我在main 中设置它就不行。当我在main 中设置它时,它只记录来自main而不是其他模块的语句。
我想在main 中设置它,以便我可以将 dictConfig 中记录器的配置放在 config.py 文件中。当我从init执行此操作时,import 语句出现问题。
这是我在 ___main____.py 中的内容:
import logging
from logging.config import dictConfig
import config as cfg
if __name__ == '__main__':
dictConfig(cfg.logging)
logger = logging.getLogger()
logger.info('Completed configuring logger()!')
main()
在 config.py 中:
logging = dict(
version = 1,
formatters = {
'f': {'format':
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s'}
},
handlers = {
'h': {'class': 'logging.StreamHandler',
'formatter': 'f',
'level': logging.INFO},
'r': {'class': 'logging.handlers.RotatingFileHandler',
'filename': 'data/logger.log',
'formatter':'f',
'maxBytes': 10000,
'backupCount':5},
},
root = {
'handlers': ['h', 'r'],
'level': logging.INFO,
},
)
在后端.py:
import logging
logger = logging.getLogger(__name__)
class Backend(object):
def __init__(self, dbi):
self._dbi = dbi
def getDimensionTableColumns(self, table_name):
logger.warning('still not working')
我的 logger.log 文件和终端中的输出是:
2018-03-07 09:48:00,858 root INFO Completed configuring logger()!
而且我知道 getDimensionTableColumns 正在运行,因为如果我将打印语句输出到终端。
有人可以解释一下出了什么问题,为什么?
您正在使用两种不同的记录器:模块中的根记录器(已配置)__main__
(使用 获得的那个logger = logging.getLogger()
)和被调用的记录器__name__ = 'backend'
(不是)。
你可以使用默认的记录器在backend.py
使用
logger = logging.getLogger() # no __name__ !
或者您可以配置一个命名记录器并在两个模块中使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句