import logging from functools import wraps from apps.utils.tasks import send_mail_task import traceback myLogger = logging.getLogger('log') def auto_log(name='', raise_exception=True, send_mail=False): def decorate(func): @wraps(func) def wrapper(*args, **kwargs): try: real_func = func(*args, **kwargs) return real_func except Exception: myLogger.error(name, exc_info=True) if send_mail: send_mail_task.delay(message=traceback.format_exc()) if raise_exception: raise return wrapper return decorate