Доступ к функциям из модулей, не содержащихся в журнале, для улучшения имен журналов - PullRequest
0 голосов
/ 21 января 2020

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

Я использую его так:

import logging, logging.config
logging.config.fileConfig('log.conf')
logging.getLogger().info('bla)

Мой обработчик файлов был объявлен так: args = ('{}.log'.format(os.path.basename(os.path.abspath('.'))), 'a')

Я использовал тот факт, что модуль logging содержит ссылку на модуль os (см. dir(logging)), поэтому я мог использовать прямые вызовы os.path.<func> из файла конфигурации. Однако я также хочу добавить datetime к моему имени файла журнала, и datetime не является частью logging.

Я могу добавить, что после факта, то есть внутри моего скрипта, сделайте что-нибудь например:

import datetime
logger = logging.getLogger()
logger.handlers[0].stream.name = ('{}'.format(datetime.datetime.now())

Во-первых, это хак, который, я думаю, не будет работать должным образом, а во-вторых, я хочу, чтобы это происходило в конфигурационном файле (так что мне не пришлось бы делать это снова каждый раз Я хочу вызвать сценарий, используя этот файл конфигурации)

Можно ли этого достичь?


log.conf

[loggers]
keys = root

[handlers]
keys = fileHand, consoleHand

[formatters]
keys = shortForm, fullForm

[logger_root]
level = DEBUG
handlers = fileHand, consoleHand

[handler_fileHand]
class = FileHandler
level = DEBUG
formatter = fullForm
args = ('{}.log'.format(os.path.basename(os.path.abspath('.'))), 'a')

[handler_consoleHand]
class = StreamHandler
level = DEBUG
formatter = shortForm
args = (sys.stdout, )

[formatter_shortForm]
format = %(asctime)s :: %(message)s
;datefmt = %Y-%m-%dT%H:%M:%S%z

[formatter_fullForm]
format = %(asctime)s :: %(levelname)s :: %(name)s :: %(message)s
;datefmt = %Y-%m-%dT%H:%M:%S%z
...