Как зарегистрировать исключение на уровне предупреждения или информации с обратной связью с помощью платформы ведения журнала python?

#python #exception #logging

Вопрос:

Используя что-то вроде этого:

 try:
   # Something...
except Exception as excep:
   logger = logging.getLogger("component")
   logger.warning("something raised an exception: "   excep)
   logger.info("something raised an exception: "   excep)
 

Я бы предпочел, чтобы это не было на уровне ошибок, потому что в моем конкретном случае это не ошибка.

Ответ №1:

Из документации по ведению журнала:

Существует три ключевых аргумента, в kwargs которых проверяются: exc_info , stack_info , и extra .

Если exc_info значение не оценивается как ложное, это приводит к добавлению информации об исключении в сообщение журнала. Если предоставлен кортеж исключений (в формате, возвращаемом sys.exc_info() ) или экземпляр исключения, он используется; в противном случае sys.exc_info() вызывается для получения информации об исключении.

Так что:

 logger.warning("something raised an exception:", exc_info=True)
 

Комментарии:

1. Обратите внимание, что в документах это явно не упоминается для получения информации, предупреждения, ошибки и т.д. Они просто говорят: «Аргументы интерпретируются как для debug ()». Вот почему, если вам нужно вернуться к этому позже, вот где вам следует искать приведенное выше описание этого поведения.

Ответ №2:

Вот один из них, который работает (python 2.6.5).

 logger.critical("caught exception, traceback =", exc_info=True)
 

Ответ №3:

Вы можете попробовать это:

 from logging import getLogger

logger = getLogger('warning')

try:
    # Somethings that is wrong.

except Exception as exp:
    logger.warning("something raised an exception: " , exc_info=True)
    logger.warning("something raised an exception: {}".format(exp))  # another way
 

Комментарии:

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

2. @BrianPeterson Цель qeustion — распечатать exp . оба упомянутых метода регистратора выполняют это. Я проверил это сейчас.