У меня есть файл конфигурации регистрации, который я использую для форматирования моего регистратора:
Я использую его так:
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