[英]how to create a decorator/ wrapper class in python to pass the attributes of error logs as a single parameter?
class 请求(APIView):
@api_view(['GET'])
def test_api_method(self):
print('This is Test API')
db_logger = logging.getLogger('db')
try:
1 / 0
except Exception as e:
db_logger.exception(e, extra={'user': self.user.username, 'class_name': self.__class__.__name__,'method_name': sys._getframe().f_code.co_name,
'module_name': __package__, 'ip_address': socket.gethostbyname(socket.gethostname())})
return Response({'data': True}, status=status.HTTP_200_OK)
我想创建一个装饰器或包装器 class 以将 db_logger.exception() 中的参数作为单参数传递。 主要是,我想用一个参数替换这个字典---> extra={............},这样这个错误记录方法就可以用来记录所有类和方法的错误。
查看此示例,了解如何创建装饰器,并访问包装的 function 及其参数。
from functools import wraps
def error_logger(func):
@wraps(func)
def wrapper(*args, **kwd):
try:
return func(*args, **kwd)
except Exception as e:
print('Error in ', func.__name__)
# reference self as: args[0]
return wrapper
class my_class:
@error_logger
def my_function(self):
return 1/0
if __name__ == '__main__':
my_class().my_function()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.