У меня есть модуль, который выводит данные на консоль и в файл журнала. Я бы хотел, чтобы вывод консоли имел простой формат '%(message)s'
, но в файле журнала я хотел бы добавить метку времени '%(asctime)s - %(message)s'
. Как настроить обработчики на отправку в консоль другого формата, чем в файл журнала? Методы, которые я опробовал, приводят к отправке обоих сообщений на консоль.
Ниже приведен один пример того, что НЕ работает:
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(message)s')
console.setFormatter(formatter)
root.addHandler(console)
if sysout:
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
ЧАСТИЧНОЕ РЕШЕНИЕ:
В моей функции setup_logging
я использую следующий код:
logging.basicConfig(filename=abs_log_file, level=logging.DEBUG,
format='%(asctime)s - %(message)s')
root = logging.getLogger()
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
console.setFormatter(formatter)
root.addHandler(console)
... и в модуле, который вызывает setup_logging
, у меня есть следующее:
# inhibits timestamps from printing to console
logging.getLogger('').handlers[1].formatter._fmt = '%(message)s'
Работает по желанию, но я получаю предупреждение "Доступ к защищенному члену _fmt класса". Что такое совместимое решение?