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

优化Django Logging配置 仅保留自定义日志屏蔽默认冗余条目

问题根因

你看到的两条冗余日志分别来自Django框架内置的两个独立日志模块,和自定义日志本身无关:

  • 第二条Forbidden: /api/v1/<path/日志:由django.security模块生成,请求触发权限拒绝、CSRF校验失败等安全类拦截时自动输出
  • 第三条"GET /api/v1/<path/ HTTP/1.1" 403 12495日志:由django.request模块生成,每次请求处理完成后自动输出访问统计记录
    你当前的LOGGING配置仅对根级django logger绑定了控制台输出、设置了INFO级别,所有Django子模块的INFO及以上日志都会被统一输出,没有对上述两个产生冗余日志的子模块做单独控制,因此出现单请求3条日志的问题。
优化配置

无需修改业务代码,仅调整settings.py中的LOGGING配置即可,核心是对两个产生冗余日志的子logger单独设置日志阈值,同时关闭日志向上传播避免重复输出,参考配置如下:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'timestamp': {
            'format': '{asctime} {levelname} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'timestamp'
        },
    },
    'loggers': {
        # 根django logger保留原有配置,输出业务自定义日志、框架核心必要日志
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
            'propagate': False,
        },
        # 调整django.request日志级别,仅输出5xx服务端错误,屏蔽4xx类正常响应的访问日志
        'django.request': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': False,
        },
        # 调整django.security日志级别,仅输出严重安全异常,屏蔽403等常规权限拦截日志
        'django.security': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': False,
        },
    },
}

配置项说明:propagate: False用于阻止日志事件向父级logger传递,避免同一条日志被多个logger重复处理输出,是解决Django日志重复问题的关键配置。

效果验证

配置生效后,同接口请求将仅保留你在视图层编写的自定义业务日志:

2022-06-02 10:26:09,714 WARNING /api/v1/<path/ GET 403: user 71 - You do not have permission to perform this action.

该配置不会影响5xx服务端错误、严重安全异常的日志输出,不影响线上问题排查,同时可减少60%以上的非必要日志存储开销,完全适配Loki的结构化日志查询要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:45:57