【问题标题】:How to log a django view如何记录 django 视图
【发布时间】:2021-04-17 19:48:21
【问题描述】:

我正在学习记录,但我不确定在我看来应该如何处理记录器,因为我读过的内容似乎不起作用,或者我只是不理解某些东西。 这是我的日志记录设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'todo': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
            'propagate': True,
        },
    },
}

这是视图和日志部分:

from rest_framework import generics, filters
from todo import models
from .serializers import TaskSerializer
from django_filters.rest_framework import DjangoFilterBackend

import logging

logger = logging.getLogger(__name__)

def myview(request):
    logger.error('Something went wrong')

class ListTask(generics.ListCreateAPIView):
    """
    API view to retrieve list of tasks or create new tasks
    """
    queryset = models.Task.objects.all()
    serializer_class = TaskSerializer
    filter_backends = [DjangoFilterBackend, filters.SearchFilter]
    filterset_fields = ['date']
    search_fields = ['description']

class DetailTask(generics.RetrieveDestroyAPIView):
    """
    API view to retrieve or delete a task
    """
    queryset = models.Task.objects.all()
    serializer_class = TaskSerializer

【问题讨论】:

    标签: python django debugging logging django-rest-framework


    【解决方案1】:

    我不确定是否有更好的方法,但您可以覆盖视图的post() 和get() 方法并在那里插入日志记录。例如:

    class ListTask(generics.ListCreateAPIView):
        """
        API view to retrieve list of tasks or create new tasks
        """
        queryset = models.Task.objects.all()
        serializer_class = TaskSerializer
        filter_backends = [DjangoFilterBackend, filters.SearchFilter]
        filterset_fields = ['date']
        search_fields = ['description']
    
        def get(self, request, *args, **kwargs):
            # do some logging
            logger.debug("A helfpul message")
            # return super which will run the default get() method for this class
            return super().get(request, *args, **kwargs)
    

    看看:http://www.cdrf.co/

    您可以查看所有不同的 DRF 视图类并查看它们支持哪些方法,这样您就知道如果您希望进行一些日志记录可以覆盖哪些内容。

    【讨论】:

    • 谢谢,但够了吗?我对记录本身有点困惑,所以我不确定一旦我添加它是否应该工作。但是,当我运行我的服务器时,我没有看到任何消息,这正常吗?
    • 您可以尝试在我提供的代码中将logger.debug() 更改为logger.error(),因为您的日志记录级别设置为INFO。试一试,看看会发生什么。或者,您可以在日志配置中将 INFO 更改为 DEBUG
    • 这有效,但我每次都能看到该消息吗?如果我得到它,是否意味着我需要修复一些东西?
    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 2020-07-23
    • 2019-04-08
    • 1970-01-01
    • 2016-03-31
    • 2011-01-09
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多