Я уже довольно давно искал в сети, официальную документацию Python и StackOverflow, но не могу найти правильный ответ.
Я слежу за Python официальный HOWTO по регистрации - мой регистратор выглядит так:
import os, logging
os.chdir("C:/Users/kerfuffle/Desktop/logtest")
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("logging.log")
fh.setLevel(logging.INFO)
sh = logging.StreamHandler()
sh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
sh.setFormatter(formatter)
logger.addHandler(fh)
logger.addHandler(sh)
logger.debug("debug!")
logger.info("info!")
logger.warning("warning!")
Последние 3 строки кода работают нормально, у нас также есть правильный вывод через StreamHandler.
logging.log - файл:
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
вывод консоли:
2020-05-27 15:41:59,584 - DEBUG - debug!
2020-05-27 15:41:59,586 - INFO - info!
2020-05-27 15:41:59,586 - WARNING - warning!
Теперь я не понимаю следующего: если я намеренно создаю ошибку, я ожидайте, что он будет записан в файл. Поэтому я добавляю в свой сценарий еще неизвестную переменную «var»:
var += 1
Я получу стандартный вывод ошибки в консоли рядом с журналом StreamHandler (), как показано выше:
2020-05-27 15:45:37,444 - DEBUG - debug!
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,451 - WARNING - warning!
Traceback (most recent call last):
File "c:/Users/kerfuffle/Desktop/logtest/file.py", line 23, in <module>
var += 1
NameError: name 'var' is not defined
Мой файл журнала показывает только:
2020-05-27 15:45:37,445 - INFO - info!
2020-05-27 15:45:37,445 - WARNING - warning!
Я знаю из руководств, что могу попытаться избежать всего с помощью:
try:
var += 1
except Exception:
logger.exception("You moron! Don't do that") #or
logger.error('What a stupid error!')
Но как я могу поймать ошибки и записывать их в мой файл журнала, которые непредсказуемы или изначально не ожидаются пользователем? (=> так что никаких попыток / except)
Иногда вы просто не знаете об ошибках до того, как они произойдут. Например, если у меня есть скрипт, запущенный через cronjob.
Спасибо за ваши ответы! : -)