Подтвердить что ты не робот

Модуль протоколирования python не записывает ничего в файл

Я пытаюсь написать сервер, который регистрирует исключения как на консоли, так и в файле. Я вытащил код из кулинарной книги. Вот он:

logger = logging.getLogger('server_logger')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('server.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)

Этот код отлично разбирается в консоли, но ничего не записывается в файл. Файл создается, но в нем ничего не написано. Я попытался закрыть обработчик, но это ничего не делает. Не смывает его. Я искал в Интернете, но, видимо, я единственный, кто столкнулся с этой проблемой. Кто-нибудь знает, в чем проблема? Спасибо за ваши ответы.

4b9b3361

Ответ 1

Попробуйте позвонить

logger.error('This should go to both console and file')

вместо

logging.error('this will go to the default logger which you have not changed the config of')

Ответ 2

Я знаю, что этот вопрос может быть слишком старым, но я нашел вышеупомянутый метод немного излишним. Я столкнулся с подобной проблемой, я смог ее решить:

import logging

logging.basicConfig(format = '%(asctime)s %(message)s',
                    datefmt = '%m/%d/%Y %I:%M:%S %p',
                    filename = 'example.log',
                    level=logging.DEBUG)

Это будет записывать в example.log все журналы, которые отлаживаются или выше.

logging.debug("This is a debug message") будет писать This is a debug message до example.log. Для этого важно, чтобы этот уровень работал.

Ответ 3

Попробуйте поставить import и basicConfig в самое начало script. Что-то вроде этого:

import logging
logging.basicConfig(filename='log.log', level=logging.INFO)
.
.
import ...
import ...