ketovv
@ketovv
Питонист

Как вывести полный traceback из обьекта Exception?

Написал для Django кастомный Middleware для отлова ошибок и складирования их (не важно куда, будь то ELK или Sentry). Внутри класса реализовал функцию process_exception, в которую приходят: request - HTTP запрос в формате Django, exception - сама ошибка, наследник Exception.

При попытке вывести exception куда-либо в строковом формате я получаю только само сообщение об ошибке, без указания модуля, в которой она возникла. Если выполняю джанговую response_for_exception(request, exception), то вместе с трейсом получаю кучу нагромождённого HTML-кода, мешающего найти трейс.

Сейчас код выглядит примерно так:
def process_exception(self, request, exception: Exception):
    error_msg = response_for_exception(request, exception).content.decode('utf-8')
    log({ 'error_msg': error_msg })
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@MEDIOFF
Python Developer
def process_exception(self, request, exception: Exception):
    import traceback
    error_msg = response_for_exception(request, exception).content.decode('utf-8')
    log({ 'error_msg': error_msg, "traceback": traceback.format_exc() })


В теории так должно работать, но не уверен, попробуйте еще когда в try/except ловите, запихнуть эту конструкцию, и пробрасывать в функцию traceback
try:
    # Тут типо где ждем ошибку:
except Lalal:
    import traceback
    trace = traceback.format_exc()
    error_handler.process_exception(request, exception: Exception, trace):
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы