从包中的多个模块进行日志记录无法从__main__工作



我正在尝试在我的项目中实现日志记录,并希望所有模块都记录到同一个文件中。如果我在 init 中设置记录器,我设法让它工作,但如果我在 main 中设置它,则无法正常工作。当我在 main 中设置它时,它只记录来自 main 而不是其他模块的语句。

我想在 main 中设置它,以便我可以将 dictConfig 中的记录器配置放在 config.py 文件中。当我从 init 执行此操作时,导入语句出现问题。

这是我在___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,
        },
)

在 backend.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')

我的记录器.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__ !

或者,您可以配置命名记录器并在两个模块中使用它。

相关内容

  • 没有找到相关文章

最新更新