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

如何在Django中禁用/api/test端点的控制台DEBUG日志?

禁用特定API端点的Django日志输出

针对存活探针每3秒请求/api/test导致控制台持续打印DEBUG日志的问题,提供三种可行解决方案:

方案一:自定义日志过滤器(全局过滤)

通过自定义日志过滤器,直接排除目标路径的日志记录:

  1. 创建过滤器文件(例如utils/log_filters.py):
class SkipHealthCheckLogs:
    def filter(self, record):
        # 过滤掉/api/test的GET请求DEBUG日志
        return not (record.getMessage().startswith('[DEBUG] GET /api/test'))
  1. 修改settings.py中的日志配置,给控制台处理器添加该过滤器:
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'skip_health_check': {
            '()': 'your_app_name.utils.log_filters.SkipHealthCheckLogs',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'filters': ['skip_health_check'],
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'DEBUG',
    },
}

方案二:使用中间件(路径级控制)

编写中间件,在目标请求处理前后临时调整日志级别:

  1. 创建中间件文件(例如middlewares/health_log_middleware.py):
import logging

class HealthCheckLogMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        self.server_logger = logging.getLogger('django.server')

    def __call__(self, request):
        if request.path == '/api/test' and request.method == 'GET':
            # 临时将日志级别提升至INFO,屏蔽DEBUG日志
            original_level = self.server_logger.level
            self.server_logger.setLevel(logging.INFO)
            response = self.get_response(request)
            self.server_logger.setLevel(original_level)
            return response
        return self.get_response(request)
  1. 在settings.py的MIDDLEWARE列表中添加该中间件(建议放在靠前位置):
MIDDLEWARE = [
    'your_app_name.middlewares.health_log_middleware.HealthCheckLogMiddleware',
    # 其他中间件...
]

方案三:视图装饰器(单视图控制)

给目标视图添加自定义装饰器,仅在该视图处理时屏蔽日志:

  1. 定义装饰器(可放在utils/decorators.py或视图文件中):
import logging
from functools import wraps

def silence_debug_log(view_func):
    @wraps(view_func)
    def wrapped_view(request, *args, **kwargs):
        server_logger = logging.getLogger('django.server')
        original_level = server_logger.level
        server_logger.setLevel(logging.INFO)
        response = view_func(request, *args, **kwargs)
        server_logger.setLevel(original_level)
        return response
    return wrapped_view
  1. 给目标视图应用装饰器:
@api_view(['GET'])
@silence_debug_log
def get_test(request):
    return HttpResponse('Ok', status.HTTP_200_OK)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:22