Выборочная обработка отслеживания исключений
Я пытаюсь создать механизм обработки исключений с несколькими уровнями информации, отображаемой пользователю для моего приложения, используя модуль журналирования 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), а затем извлечь информацию об исключении и при необходимости передать ее в регистратор вручную.