首页 > 解决方案 > 对带有配置文件的 python 日志记录感到困惑(仅记录在配置文件中为 root_logger 设置的内容)

问题描述

我(现在)有以下代码:

import logging
from logging.config import fileConfig


def function1():
    logger = logging.getLogger('function1')
    logger.debug('Debug')
    logger.info('Info')
    logger.warning('Warn')
    logger.critical('Critical')


def main():
    fileConfig('test_log.conf')
    logger = logging.getLogger('main')
    logger.debug('Debug')
    logger.info('Info')
    logger.warning('Warn')
    logger.critical('Critical')
    function1()


if __name__ == '__main__':
    main()

我有以下配置文件:

[loggers]
keys:root,log1

[handlers]
keys:consoleHandler,rotatingFileHandler

[formatters]
keys:logFormatter

[logger_root]
level:INFO
handlers:rotatingFileHandler,consoleHandler

[logger_log1]
level:DEBUG
handlers:rotatingFileHandler, consoleHandler
qualname:main
propagate=1

[handler_consoleHandler]
class:StreamHandler
formatter:logFormatter
args:(sys.stdout,)

[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler
level=NOTSET
args=('logs/Log.log', 'w', 5000)
formatter=logFormatter

[formatter_logFormatter]
format:%(asctime)s - %(name)s -%(levelname)s - %(message)s

当我运行时,我得到以下输出:

2020-03-23 19:16:30,529 - main -DEBUG - Debug
2020-03-23 19:16:30,529 - main -DEBUG - Debug
2020-03-23 19:16:30,530 - main -INFO - Info
2020-03-23 19:16:30,530 - main -INFO - Info
2020-03-23 19:16:30,530 - main -WARNING - Warn
2020-03-23 19:16:30,530 - main -WARNING - Warn
2020-03-23 19:16:30,530 - main -CRITICAL - Critical
2020-03-23 19:16:30,530 - main -CRITICAL - Critical
2020-03-23 19:16:30,531 - function1 -INFO - Info
2020-03-23 19:16:30,531 - function1 -WARNING - Warn
2020-03-23 19:16:30,531 - function1 -CRITICAL - Critical

我给了每个记录器的名字,但我仍然有同样的问题

原帖:

我有以下代码:

def main():
    import logging
    from logging.config import fileConfig
    fileConfig('logging.conf')
    logger = logging.getLogger()
    logger.debug('Debug')
    logger.info('Info')
    logger.warning('Warn')
    logger.critical('Critical')

if __name__ == '__main__':
    main()

我有以下配置文件:

[loggers]
keys:root,log1

[handlers]
keys:consoleHandler,rotatingFileHandler

[formatters]
keys:logFormatter

[logger_root]
level:INFO
handlers:rotatingFileHandler,consoleHandler

[logger_log1]
level:DEBUG
handlers:rotatingFileHandler, consoleHandler
qualname:main
propagate=1

[handler_consoleHandler]
class:StreamHandler
formatter:logFormatter
args:(sys.stdout,)

[handler_rotatingFileHandler]
class=logging.handlers.RotatingFileHandler
level=NOTSET
args=('logs/Log.log', 'w', 5000)
formatter=logFormatter

[formatter_logFormatter]
format:%(asctime)s - %(name)s -%(levelname)s - %(message)s

当我运行时,我得到以下输出:

2020-03-23 18:13:54,950 - tedCheck.main -WARNING - Warn
2020-03-23 18:13:54,950 - tedCheck.main -CRITICAL - Critical

我所期望的是,无论 root_logger 设置为什么,我都可以在配置文件的功能/方法的特定日志部分中覆盖它。

如果要执行 root_logger 设置的任何操作,那么拥有该部分有什么好处?我的猜测是我的配置文件以某种方式被冲洗掉了。

标签: pythonlogging

解决方案


此行获取层次结构中的根记录器,特别是:

logger = logging.getLogger()

如果您不想要根记录器,那么您需要传递一个名称

logger = logging.getLogger(name="main")

请注意,使用您现有的配置,以及为 root 配置的传播 log1 和控制台/文件处理程序,您可能会看到重复的日志事件。


推荐阅读