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

Django日志文件无法显示完整异常回溯信息的问题求助

Django 2.2 + DRF 日志异常回溯不显示问题解决

核心修复步骤

1. 修正日志格式化器配置

在settings.py的LOGGING['formatters']中,必须加入%(exc_info)s字段(而非stack_info),这是输出异常栈追踪的关键字段:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '{levelname} {asctime} {module} {message} %(exc_info)s',
            'style': '{',
        },
    },
    # 其他配置(handlers、loggers)...
}

%(exc_info)s仅在日志级别为ERROR且捕获到异常时才会输出完整回溯内容。

2. 正确调用logger.exception()

在视图的异常捕获块中,直接使用logger.exception(),它会自动附加当前异常的栈追踪,无需手动传参:

import logging
from rest_framework.views import APIView

logger = logging.getLogger(__name__)

class TestView(APIView):
    def get(self, request):
        try:
            # 可能抛出异常的业务代码
            1 / 0
        except Exception:
            logger.exception("视图执行触发异常")

若用logger.error()替代,需手动添加exc_info=True参数:logger.error("错误信息", exc_info=True)。

3. 检查日志处理器级别

确保日志处理器(如FileHandler)的level设置为ERROR或更低(如DEBUG),否则ERROR级日志会被过滤:

LOGGING = {
    # ...
    'handlers': {
        'file': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': '/path/to/your/logfile.log',
            'formatter': 'verbose',
        },
    },
    # ...
}

4. 验证日志记录器配置

确保视图所在模块对应的日志记录器关联了正确的处理器:

LOGGING = {
    # ...
    'loggers': {
        'your_app_name': {  # 替换为实际的app名称或模块名
            'handlers': ['file'],
            'level': 'ERROR',
            'propagate': True,
        },
    },
}

常见误区规避

  • 不要混淆%(exc_info)s和%(stack_info)s:后者输出的是当前线程栈信息,不是异常回溯。
  • 捕获异常后不要提前修改或抛出新异常:否则原异常的栈追踪会丢失。
  • 避免日志级别设置过高:比如设为CRITICAL会导致ERROR级日志无法写入文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:30:55