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

标签 python django logging wrapper

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

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)

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

最佳答案

装饰器内部函数应该返回带有args和kwargs的外部函数,并且您的装饰器问题将解决,但另一个问题是Django无法stdr此装饰 View 函数的控制台输出。

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

关于使用装饰器进行 python/django 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47627187/

相关文章:

python - 将使用 Reportlab 生成的图像保存在我的 MEDIA 文件夹中(在 Amazon S3 中)

javascript - Django:语法错误:意外的标记<

python - 使用远程机器(类似于代理)通过 JupyterLab 打开网站

python - 列表项的 Sharepoint 过滤器 (GetListItems)

python - 在Django中,MyModel.objects.get(my_field=x)是否等于MyModel.objects.filter(my_field=x).get()?

java - 属性的级别值错误,无法为 java.util.logging.FileHandler 设置级别

python - 如何查看 Django 登录生产环境

c++ - Qt 中的自定义和默认消息处理程序

python - numpy 在另一个数组中创建最大连续对的数组

python - 是否可以在不创建新字典的情况下在 for 循环中使用字典理解?