У меня есть функция общего назначения, которая отправляет информацию об исключениях в журнал приложений. Я использую функцию exception_handler
из методов в классах. Обработчик журнала приложения, который передается и вызывается exception_handler
, создает строку JSON, которая фактически отправляется в файл журнала. Это все работает нормально.
def exception_handler(log, terminate=False):
exc_type, exc_value, exc_tb = sys.exc_info()
filename, line_num, func_name, text = traceback.extract_tb(exc_tb)[-1]
log.error('{0} Thrown from module: {1} in {2} at line: {3} ({4})'.format(exc_value, filename, func_name, line_num, text))
del (filename, line_num, func_name, text)
if terminate:
sys.exit()
Я использую его следующим образом: (гиперупрощенный пример)
from utils import exception_handler
class Demo1(object):
def __init__(self):
self.log = {a class that implements the application log}
def demo(self, name):
try:
print(name)
except Exception:
exception_handler(self.log, True)
Я хотел бы изменить exception_handler
для использования в качестве декоратора для большого количества методов, то есть:
@handle_exceptions
def func1(self, name)
{some code that gets wrapped in a try / except by the decorator}
Я просмотрел несколько статей о декораторах, но пока не понял, как реализовать то, что я хочу сделать. Мне нужно передать ссылку на активный объект журнала, а также передать 0 или более аргументов в обернутую функцию. Я был бы рад преобразовать exception_handler
в метод класса, если это упростит задачу.