Использование dictConfig () с переменным именем файла журнала - PullRequest
0 голосов
/ 29 мая 2020

У меня есть словарь конфигурации для python сценариев, которые я импортирую из другого модуля, как показано ниже

LOG_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
        '': {
        'handlers': ['consoleHandler', 'fileHandler'],
        'level': 'DEBUG'
    }
},
'handlers': {
    'consoleHandler': {
        'level': 'INFO',
        'formatter': 'consoleFormatter',
        'class': 'logging.StreamHandler',
        'stream': 'ext://sys.stdout',
    },
    'fileHandler': {
        'level': 'INFO',
        'formatter': 'fileFormatter',
        'class': 'logging.FileHandler',
        'mode': 'w',
    }
},
'formatters': {
    'fileFormatter': {
        'format': '%(asctime)s - %(levelname)s -  %(name)s - %(module)s - %(funcName)s - %(message)s',
                    'datefmt': '%Y-%m-%d %H:%M:%S',
                    'class': 'logging.Formatter'
    },
    'consoleFormatter': {
        'format': 'UAC_API>> %(levelname)s - %(message)s'
    },
},

}

Я хочу, чтобы имя файла журнала было переменным. При загрузке конфигурации из файла я использовал:

logging.config.fileConfig(config_file,
                          defaults={'logfilename': logfullpath},
                          disable_existing_loggers=False)

, где logfullpath - путь к файлу журнала.

Но defaults={'logfilename': logfullpath} не работает с dictConfig (по сравнению с logging.config.fileConfig имеет только один агумент). Кто-нибудь может мне с этим помочь?

1 Ответ

0 голосов
/ 02 июня 2020

Нашел обходной путь, если у кого-то такая же проблема. Поскольку LOG_CONFIG - это словарь, я расширил его, как показано ниже (добавлено filename:logfullpath как пара значений ключа для fileHandler). Затем я использовал его как аргумент для dictConfig.

LOG_CONFIG['handlers']['fileHandler']['filename'] = logfullpath

logging.config.dictConfig(LOG_CONFIG)
...