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

如何避免Django REST Framework中autoreload产生的冗余日志?

解决Django REST Framework中autoreload冗余日志问题

你当前的日志配置会将django命名空间下所有INFO及以上级别的日志输出到文件,而Django的autoreload机制在开发模式下会频繁产生INFO级别的冗余日志,导致日志文件被刷屏。以下是针对性的解决办法:

修改settings.py中的日志配置

在LOGGING的loggers部分新增对django.utils.autoreload的单独配置,过滤掉它的冗余日志:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'file': {
            'format': '{levelname} | {asctime} | {module} | {message} | {funcName} | {lineno} |',
            'style': '{',
        },
    },
    'handlers': {
        'fileInfo': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': "./info.log",
            'formatter': 'file',
        },
        'fileError': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': "./error.log",
            'formatter': 'file',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['fileInfo', 'fileError'],
            'level': 'INFO',
            'propagate': True,
        },
        # 过滤autoreload的冗余日志
        'django.utils.autoreload': {
            'level': 'WARNING',  # 仅记录WARNING及以上级别日志,忽略INFO级别的冗余输出
            'propagate': False,  # 禁止日志向上传递,避免被父logger重复处理
        },
    },
}

配置说明

  • django.utils.autoreload是autoreload机制对应的日志器,单独设置它的级别为WARNING,就能过滤掉它产生的大量INFO级别的冗余日志。
  • 设置propagate: False可以防止这些日志被父级的django日志器再次处理,确保不会重复输出。

可选优化:使用业务专属日志器

你的view.py中使用了django日志器,建议改为使用当前模块的日志器,让业务日志和框架日志分离,更便于后续管理:

import logging 
logger = logging.getLogger(__name__)  # 替换为当前模块的日志器

def addsomething():
    logger.info("print something")
    logger.error("error")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:02:22