Запутался в записи python с файлом конфигурации (регистрирует только то, что установлено для root_logger в файле конфигурации) - PullRequest
0 голосов
/ 24 марта 2020

У меня (сейчас) следующий код:

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 был при установке я могу переопределить его в разделе журнала c для функции / метода файла конфигурации.

Какая польза от раздела, если он собирается делать то, на что установлен root_logger? Я предполагаю, что мой файл конфигурации каким-то образом скрыт.

1 Ответ

0 голосов
/ 24 марта 2020

Эта строка получает регистратор root в иерархии, а именно:

logger = logging.getLogger()

Если вам не нужен регистратор root, вам нужно передать имя

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

Обратите внимание, что при существующей конфигурации, распространяющихся обработчиках log1 и console / file, настроенных также на root, вы, скорее всего, увидите дублированные события журнала.

...