Logging.exception: примеры (PYTHON)
Использование функции exception в модуле logging Python
Раздел: Логирование, Ошибки
logging.exception(msg: object, *args, **kwargs): Noneтиповые примерыlogging.exception на php, c#, sql, javalogging.exception изменения pythonпримеры расширенные
Описание функции logging.exception
Функция logging.exception предназначена для записи сообщений об ошибках с уровнем ERROR и автоматическим добавлением информации о текущем исключении. Ее используют внутри блоков except для логирования деталей исключений.
Сигнатура функции: logging.exception(msg, *args, **kwargs)
Аргументы:
- msg - строка сообщения, может содержать спецификаторы форматирования (%s, %d).
- *args - аргументы для подстановки в спецификаторы сообщения.
- **kwargs - дополнительные параметры:
exc_info(автоматически устанавливается вTrue),stack_info(добавляет информацию о стеке вызовов),extra (словарь с дополнительными данными),stacklevel(уровень для корректировки имени функции в логе).
Возвращаемое значение: отсутствует (None). Функция всегда записывает сообщение с уровнем ERROR.
Базовые примеры использования
import logging
logging.basicConfig(level=logging.DEBUG)
try:
1 / 0
except ZeroDivisionError:
logging.exception("Произошла ошибка деления")
ERROR:root:Произошла ошибка деления Traceback (most recent call last): File "<stdin>", line 2, in <module> ZeroDivisionError: division by zero
try:
int('abc')
except ValueError:
logging.exception("Ошибка конвертации %s в число", 'abc', extra={'user': 'admin'})
ERROR:root:Ошибка конвертации abc в число Traceback (most recent call last): File "<stdin>", line 2, in <module> ValueError: invalid literal for int() with base 10: 'abc'
Похожие функции в Python
- logging.error(exc_info=True) - аналог с явным указанием параметра
exc_info. Используют когда нужно контролировать уровень логирования. - logger.log(level, msg, exc_info=True) - запись с произвольным уровнем. Применяют для нестандартных уровней логирования.
- sys.excepthook - глобальный обработчик исключений. Подходит для перехвата непойманных исключений.
logging.exception предпочтительнее в блоках except, так как автоматически добавляет трассировку.
Аналоги в других языках программирования
Java
try {
int result = 1 / 0;
} catch (ArithmeticException e) {
logger.error("Ошибка деления", e);
}JavaScript
try {
throw new Error('Тестовая ошибка');
} catch (error) {
console.error('Произошла ошибка:', error);
}C#
try {
throw new InvalidOperationException();
}
catch (Exception ex) {
logger.LogError(ex, "Ошибка операции");
}Go
if err != nil {
log.Printf("Ошибка: %v\n", err)
}Типичные ошибки
# Ошибка: использование вне блока except
import logging
def func():
logging.exception("Ошибка") # Выведет 'NoneType' traceback
ERROR:root:Ошибка Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'NoneType' object is not callable
# Ошибка: повторный вызов без исключения
try:
1/0
except:
exc = Exception("Кастомная ошибка")
logging.exception(exc) # Выведет оригинальное ZeroDivisionError
Изменения в последних версиях
В Python 3.8 добавлен параметр stacklevel для корректировки отображения места вызова в логах. В Python 3.11 улучшена производительность форматирования сообщений.
Расширенные примеры
Пример python
# Логирование в JSON формате
import logging
import json
class JsonFormatter(logging.Formatter):
def format(self, record):
log_record = {
'message': record.getMessage(),
'level': record.levelname,
'exception': self.formatException(record.exc_info) if record.exc_info else None
}
return json.dumps(log_record)
logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
try:
raise KeyError('отсутствующий ключ')
except:
logging.exception("JSON логирование ошибки")
{"message": "JSON логирование ошибки", "level": "ERROR", "exception": "Traceback (most recent call last):\n File ... KeyError: 'отсутствующий ключ'"}Пример python
# Фильтрация конфиденциальных данных
class SanitizeFilter(logging.Filter):
def filter(self, record):
if record.exc_info:
record.msg = record.msg.replace('пароль123', '[скрыто]')
return True
logging.getLogger().addFilter(SanitizeFilter())
try:
raise Exception('Ошибка аутентификации с пароль123')
except:
logging.exception("Служебное сообщение")
питон logging.exception function comments
En
Logging.exception Log a message with severity ERROR and exception info