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
相关产品推荐
相关产品推荐

