Запись в лог и вывод в терминал

Рейтинг: 0Ответов: 2Опубликовано: 30.04.2023

Нужен был код для записи лога работы телеграмм бота. Нашел такой вариант. Проблема в том что он выводит лог только в терминал, а в bot.log нет. Помогите исправить таким образом что бы лог выводился и в терминал, и записывался в файл.

import logging

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
handler = logging.FileHandler('bot.log')
handler.setLevel(logging.INFO)
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger.addHandler(handler)

Ответы

▲ 0Принят

Нашел следующее решение. У меня, покрайней мере, этот вариант дал необходимый результат.

logging.basicConfig(level=logging.INFO)

file_handler = logging.FileHandler('bot.log')

console_handler = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

logger = logging.getLogger('my_bot')
logger.addHandler(file_handler)
logger.addHandler(console_handler)
▲ 1

Попробуй убрать basicConfig и использовать два handler-а в своем logger-е

import logging

logger = logging.getLogger(__name__)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

file_handler = logging.FileHandler('bot.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)