python/django 使用装饰器进行日志记录

python/django logging with decorators

我想在每个函数上放置一个装饰器来记录函数中发生的所有事情。我做了一个包装函数和装饰器来用装饰器记录函数。

views.py

def func_detail(func):
   @wraps(func)
     def func_wrapper(*args, **kwargs):
         r = func(*args, **kwargs)
         logging.getLogger(__name__)
         logging.basicConfig(filename='test.log', filemode='a',
                             format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
                              datefmt='%H:%M:%S',
                              level=logging.DEBUG)
         return r
     return func_wrapper

class UsersViewSet(viewsets.ViewSet):
    @func_detail
    def list(self, request):
        queryset = Mytable.objects.all()
        if request.GET.get('name'):
            queryset = queryset.filter(name=request.GET.get('name'))
        serializer = CheckSerializer(queryset, many=True)
        logging.info("GET request and returned response")
        return Response(serializer.data)

问题是此代码中未创建日志文件。此外,它是在另一个项目上创建的,但没有在日志文件(空日志文件)中打印任何内容。我想在日志文件中为正在发生的一切打印一条消息,但这似乎不起作用。请帮助。

装饰器内部函数应该 return 带有 args 和 kwargs 的外部函数,你的装饰器问题将得到解决,但另一个问题是 Django 无法 stdr 这个装饰视图函数的控制台输出。

def func_detail(func):
    @wraps(func)
    def func_wrapper(*args, **kwargs):
        logging.getLogger(__name__)
        ----
        return func(*args, **kwargs)
    return func_wrapper