如何避免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
相关产品推荐
相关产品推荐

