如何在Django中禁用/api/test端点的控制台DEBUG日志?
禁用特定API端点的Django日志输出
针对存活探针每3秒请求/api/test导致控制台持续打印DEBUG日志的问题,提供三种可行解决方案:
方案一:自定义日志过滤器(全局过滤)
通过自定义日志过滤器,直接排除目标路径的日志记录:
- 创建过滤器文件(例如
utils/log_filters.py):
class SkipHealthCheckLogs: def filter(self, record): # 过滤掉/api/test的GET请求DEBUG日志 return not (record.getMessage().startswith('[DEBUG] GET /api/test'))
- 修改
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', }, }
方案二:使用中间件(路径级控制)
编写中间件,在目标请求处理前后临时调整日志级别:
- 创建中间件文件(例如
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)
- 在
settings.py的MIDDLEWARE列表中添加该中间件(建议放在靠前位置):
MIDDLEWARE = [ 'your_app_name.middlewares.health_log_middleware.HealthCheckLogMiddleware', # 其他中间件... ]
方案三:视图装饰器(单视图控制)
给目标视图添加自定义装饰器,仅在该视图处理时屏蔽日志:
- 定义装饰器(可放在
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
- 给目标视图应用装饰器:
@api_view(['GET']) @silence_debug_log def get_test(request): return HttpResponse('Ok', status.HTTP_200_OK)
内容的提问来源于stack exchange,提问作者Vinny
相关产品推荐
相关产品推荐

