You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图及视图集内日志不生效问题求助

Django视图方法内日志无法打印的排查与解决

问题描述

视图模块外部调用logger.debug()能正常输出日志,但视图类的get_queryset和download方法内的debug日志完全没显示,相关代码和配置如下:

views.py

import logging

logger = logging.getLogger(__name__)
logger.debug('THIS LOGGING MESSSAGE SHOWS UP IN LOGS')

class RequestGetResultViewSet(viewsets.GenericViewSet, mixins.RetrieveModelMixin):
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.RequestGetResultSerializer
    queryset = Request.objects.all()

    def get_queryset(self):
        logger.debug('THIS LOGGING MESSSAGE DOES NOT SHOW UP')
        return self.queryset.filter(user=self.request.user.id) 

    @action(methods=['get'], detail=True, renderer_classes=(PassthroughRenderer,))
    def download(self, *args, **kwargs):
        logger.debug('THIS LOGGING MESSSAGE DOES NOT SHOW UP')
        # working code here
        return response

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'DEBUG' ,
    },
   
}

排查与解决步骤

1. 先确认视图方法是否真的被执行

有时候日志没输出不是配置问题,而是方法根本没被调用。在目标方法里加一行print语句测试:

def get_queryset(self):
    print("get_queryset方法已执行")
    logger.debug('THIS LOGGING MESSSAGE DOES NOT SHOW UP')
    return self.queryset.filter(user=self.request.user.id)

如果控制台能看到print的输出,说明方法确实被执行,问题出在日志配置;如果看不到,先排查路由、权限等是否导致方法没触发。

2. 显式配置模块级别的日志级别

虽然你把root日志设为DEBUG,但Django运行时可能会对某些模块的日志级别做默认调整。直接在LOGGING配置里指定视图所在模块的日志级别,确保debug日志能被捕获:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'DEBUG' ,
    },
    'loggers': {
        # 替换成你的视图所在模块名,比如views.py在myapp下就写'myapp.views'
        'your_app_name.views': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

3. 检查logger的实际配置(可选)

如果还是不行,可以在视图方法里打印logger的当前配置,确认级别和handler是否正确:

def get_queryset(self):
    print(f"当前logger级别: {logging.getLevelName(logger.level)}")
    print(f"logger绑定的handler: {[h.__class__.__name__ for h in logger.handlers]}")
    logger.debug('THIS LOGGING MESSSAGE DOES NOT SHOW UP')
    return self.queryset.filter(user=self.request.user.id)

如果输出的级别是INFO或更高,说明有代码或配置修改了logger级别,针对性调整即可。


内容的提问来源于stack exchange,提问作者Hello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:55:16