如何在 python 中创建装饰器/包装器 class 以将错误日志的属性作为单个参数传递?

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() 中的参数作为 sin 单个参数传递。 主要是,我想用一个参数替换这个字典---> extra={............},这样这个错误记录方法就可以用来记录所有 classes 和方法。

查看此示例,了解如何创建装饰器并访问包装函数及其参数。

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()