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

如何在Cloud Run日志中展示Django运行日志与错误日志?

问题根因

你遇到的日志无法采集问题主要由3个原因导致:

  1. uWSGI默认开启stdout缓冲,Python默认也会对stdout输出做行缓冲,日志没有实时刷出到标准流,导致Cloud Run无法采集
  2. Django默认root logger级别为WARNING,你输出的INFO级别日志优先级低于WARNING,被直接过滤
  3. 未明确配置日志输出到无缓冲的stderr,stdout的缓冲机制进一步提升了日志丢失概率

首先先回答你的疑问:Cloud Run不需要你向/var目录写入日志,只要进程将内容输出到stdout或stderr流就会自动采集,你当前的supervisor配置已经正确将uWSGI、nginx的输出定向到了/dev/stdout、/dev/stderr,这部分无需调整。


解决步骤

1. 修改uwsgi.ini配置,关闭缓冲

在uwsgi.ini的[base]段添加以下配置:

# 强制Python关闭输出缓冲
env = PYTHONUNBUFFERED=1
# 关闭uWSGI日志缓冲,实时输出
log-master = true
disable-write-exception = true
buffer-size = 65535
# 将uWSGI日志统一输出到stderr
log-to = /dev/stderr

2. 调整Django LOGGING配置

修改settings.py中的日志配置:

  • 明确指定StreamHandler输出到stderr
  • 按需调整root logger级别,匹配你需要输出的日志等级
  • 新增django.request logger配置,确保500错误栈完整输出
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'local': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s"
        },
        'verbose': {
            'format': '{message}',
            'style': '{',
        },
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        }
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stderr', # 新增:明确输出到无缓冲的stderr
            'formatter': 'local',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO', # 从WARNING调整为INFO,可输出INFO及以上级别的日志
    },
    'loggers': {
        'users': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True, # 改为True,让子logger(如django.request)的日志可向上传递
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,
        },
        # 新增:捕获请求异常,输出完整栈追踪
        'django.request': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': False,
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    }
}

3. 验证Error Report功能

调整后只要错误日志完整输出到stderr,包含Python异常栈信息,Cloud Run Error Report会自动识别上报,无需额外配置。

你编写的logger.info('hello world')日志只要对应模块的logger级别不高于INFO,就会正常输出到Cloud Run日志面板。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:09:03