#python-3.x #python-logging
#python-3.x #python-ведение журнала
Вопрос:
Я знаю, что есть много вопросов, связанных с этим, но я не нашел того, который применим к моему случаю.
Я запускаю скрипт (Python 3.7.0) в Windows, который должен регистрировать некоторые события, но он создает только пустой файл log_minera.log.
Уровень ведения журнала, похоже, в порядке, такой же, как режим записи, обработчик подключен к регистратору… Я подозреваю, что закрытие окна просто убивает незаполненные потоки, поэтому они никогда не записываются, но добавление строки в flush не работает ни при нажатии ENTER, ни при закрытии. Помогите, пожалуйста!
import logging
logger = logging.getLogger(__name__)
handler = logging.FileHandler('log_minera.log', mode='w')
formatter = logging.Formatter('* %(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
logger.addHandler(handler)
while True:
logger.info('info to be logged')
# code...
logger.error('other info related to errors')
# more code
#logger.handlers[0].flush() <- does nothing
answer = input('Press ENTER to repeat or close the window to exit.')
Комментарии:
1. Я попробовал ваш код с такими результатами в регистраторе: * 2019-03-25 10:11: 31,362 — основная ОШИБКА — другая информация, связанная с ошибками * 2019-03-25 10: 11: 34,251 — основная ОШИБКА — другая информация, связанная с ошибками можете ли вы рассказать мне больше о вашей среде, вы проверили папку, в которой находится ваш код?
2. Папка содержит несколько входных файлов, подлежащих обработке, и скрипт, упакованный в exe-файл, который отлично работает помимо ведения журнала. Как я уже сказал, файл создается в той же папке, но остается пустым во время выполнения и остается таким после закрытия. Также мой пользователь является владельцем папки.
Ответ №1:
Вы не устанавливаете уровень вашего пользовательского регистратора. Следовательно, он имеет тот же уровень, что и родительский регистратор, в вашем случае, вероятно, корневой регистратор.
Я попробовал ваш код, и в моей настройке logger
есть уровень WARNING
. Это означает, что "info to be logged"
не будет регистрироваться внутри файла.
При вашей настройке может случиться так, что вы установите уровень вашего корневого регистратора на что-то большее, чем ERROR
, возможно CRITICAL
, при создании вашего logger
с этим уровнем. В этом случае ничего под logger.critical
не было бы напечатано.
Либо установите уровень вашего корневого регистратора на INFO
, либо установите logger
уровень на INFO
явно, вот так:
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO) # <- HERE