Я хотел бы использовать ведение журнала для регистрации информации (в настоящее время та же информация) как для консоли, так и для файла.
Однако я вижу, что на консоль выводится дополнительная нежелательная информация.
Я хотел бы получить следующие выходные данные как для консоли, так и для файла:
INFO - thisuser executed the pipeline at 2019-04-17 13:44:50,626
default log message
other default log message
INFO - pipeline execution completed at 2019-04-17 13:44:50,627
INFO - total time elapsed: 100.4 minutes
Я получаю ожидаемый вывод в файле, но консоль выводит следующее:
INFO:start_log:thisuser
INFO - thisuser executed the pipeline at 2019-04-17 13:44:50,626
INFO:root:default log message
default log message
INFO:root:other default log message
other default log message
INFO:end_log:-
INFO - pipeline execution completed at 2019-04-17 13:44:50,627
INFO:duration_log:100.4
INFO - total time elapsed: 100.4 minutes
Я хотел бы удалить дополнительную информацию (нечетные строки выше), напечатанную на консоли. Любая помощь будет принята с благодарностью!
Ниже приведен код, который я использую:
import logging
import getpass
class DispatchingFormatter:
def __init__(self, formatters, default_formatter):
self._formatters = formatters
self._default_formatter = default_formatter
def format(self, record):
formatter = self._formatters.get(record.name, self._default_formatter)
return formatter.format(record)
logging.basicConfig(level=logging.INFO)
formatter = DispatchingFormatter({
'start_log': logging.Formatter('%(levelname)s - %(message)s executed the pipeline at %(asctime)s'),
'end_log': logging.Formatter('%(levelname)s - pipeline execution completed at %(asctime)s'),
'duration_log': logging.Formatter('%(levelname)s - total time elapsed: %(message)s minutes')
},
logging.Formatter('%(message)s'),
)
c_handler = logging.StreamHandler()
c_handler.setFormatter(formatter)
f_handler = logging.FileHandler('log.txt')
f_handler.setFormatter(formatter)
logging.getLogger().addHandler(c_handler)
logging.getLogger().addHandler(f_handler)
logging.getLogger('start_log').info(f'{getpass.getuser()}')
logging.info('default log message')
logging.info('other default log message')
logging.getLogger('end_log').info('-')
time_elapsed = 100.4
logging.getLogger('duration_log').info(f'{time_elapsed}')
Конвейер будет печатать ~ 100 строк информации (результаты анализа), которые мне не хотелось бы добавлять на каком-либо уровне ведения журнала, поэтому я попытался реализовать с использованием нескольких форматеров.
Я знаю, что это довольно хакерское решение ... если у кого-то есть общие предложения по улучшению, это также будет оценено!