drygdryg
@drygdryg
Python-разработчик

Как в Python, используя logging, записать в traceback пойманного исключения значения локальных переменных функции?

Требуется логировать исключение с выводом в taceback значений локальных переменных (locals) функции, где исключение было возбуждено.
Нашёл способ, как добавить переменные в traceback: https://stackoverflow.com/a/67417480/9310156
import traceback

c = ['Help me!']

def bar(a = 3):
    d = {1,2,3}
    e = {}
    foo(a)

def foo(a=4):
    b = 4
    if a != b:
        raise Exception("a is not equal to 4")

try:
    bar(3)
except Exception as ex:
    tb = traceback.TracebackException.from_exception(ex, capture_locals=True)
    print("".join(tb.format()))

Но остался вопрос: как соединить это с модулем logging, чтобы получать такой же traceback при вызове logging.exception?
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Попробуй создать свой LoggerAdapter или Filter. Вообще в доках есть секция на эту тему, почитай, может, найдешь что полезное.
По сути, схема работы logging такая:
  • Logger предоставляет интерфейс генерации логов приложению, и создаёт объект-запись.
  • LoggerAdapter вызывается логгером, чтобы дополнить запись специфичной для программы контекстной информацией.
  • Filter определяет, какие записи реально выводить в лог, и может их менять
  • Formatter делает из записи строку.
  • Handler записывает записи по назначению.


Либо, если тебя устраивает вариант делать это вручную, ты можешь передать в параметр exc_info методов логгера кортеж вида (класс исключения, объект исключения, трейсбэк). Тогда ты можешь подставить свой трейсбэк вместо "родного".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы