Выборочная обработка отслеживания исключений

Я пытаюсь создать механизм обработки исключений с несколькими уровнями информации, отображаемой пользователю для моего приложения, используя модуль журналирования Python.

В приложении модуль регистрации имеет 2 обработчика: обработчик файла для хранения информации DEBUG и обработчик потока для хранения информации INFO. По умолчанию уровень ведения журнала установлен на INFO. Я пытаюсь добиться настройки, при которой, если возникает какое-либо исключение, пользователю по умолчанию показывается простое сообщение об ошибке без каких-либо трассировок. Если для уровня ведения журнала установлено значение DEBUG, пользователь все равно должен получать только простое сообщение, но на этот раз отслеживание исключения регистрируется в файле журнала через обработчик файла.

Можно ли этого добиться?

Я пытался с помощью logger.exception(e), но он всегда печатает трассировку на консоль.

2 ответа

Решение

traceback модуль может вам помочь. На верхнем уровне вашего приложения вы должны поместить оператор catch all:

setup_log_and_other_basic_services()
try:
    run_your_app()
except Exception as e:
    if is_debug():
        traceback.print_stack()
    else:
        traceback.print_stack(get_log_file())
    print e

код за пределами блока try/catch не должен быть аварийно завершен.

Напишите свою собственную функцию обработки исключений и используйте ее каждый раз, когда пишете catch.

В этой функции вы должны проверить, какой режим включен (INFO или DEBUG), а затем извлечь информацию об исключении и при необходимости передать ее в регистратор вручную.

Другие вопросы по тегам