Ведение журнала Python, оставляющее файл пустым

#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