在django中安装sentry sdk需运行pip install sentry-sdk≥1.0.0,在settings.py末尾调用sentry_sdk.init()初始化,dsn须从sentry控制台复制,debug=false时自动上报,支持手动捕获异常、添加上下文及敏感数据过滤。

如何在Django项目中安装并初始化Sentry SDK
直接用 sentry-sdk 替代旧版 raven,新版默认自动集成 Django 中间件和日志捕获,不需要手动 patch。
- 运行
pip install sentry-sdk,确保版本 ≥ 1.0.0(低于此版本不支持 Django 3.2+ 的异步中间件) - 在
settings.py最底部(必须在所有其他配置之后)添加初始化代码:
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="https://xxx@oxxx.ingest.sentry.io/xxx",
integrations=[DjangoIntegration()],
traces_sample_rate=0.1,
send_default_pii=True,
)
注意 DSN 必须从 Sentry 项目设置页复制「Client Keys (DSN)」里的完整 URL;traces_sample_rate 控制性能监控采样率,线上建议设为 0.1 或更低,避免打爆配额。
Django DEBUG=False 时才上报错误
Sentry SDK 默认只在 DEBUG=False 时激活,这是硬编码逻辑,不是配置项。如果本地开发想测试上报,不能靠改 DEBUG,否则会暴露敏感信息。
- 临时调试:在
sentry_sdk.init()中加environment="development",并在 Sentry 后台项目设置里开启 development 环境的报警规则 - 真正上线前务必确认
DEBUG=False且ALLOWED_HOSTS已正确配置,否则500错误可能被 Django 拦截在中间件外,根本不会进 Sentry - 若使用 Nginx + Gunicorn,确保
SECURE_PROXY_SSL_HEADER设置正确,否则request.META中的HTTP_X_FORWARDED_PROTO缺失,可能导致部分请求上下文丢失
如何让 Sentry 捕获自定义异常和业务日志
默认只捕获未处理的 500 错误,但多数业务异常是主动 raise 并被 try/except 拦截的,这类不会自动上报。
- 手动上报:在
except块里调用sentry_sdk.capture_exception(e),不要只打logger.error - 添加上下文:用
sentry_sdk.set_tag("order_id", order.id)或sentry_sdk.set_context("user_data", {"email": user.email}),比堆日志更结构化 - 避免敏感数据:
send_default_pii=True会自动提取request.POST和request.GET,但密码、token 类字段需在sentry_sdk.init()中通过before_send过滤:
def before_send(event, hint):
if "user" in event and "ip_address" in event["user"]:
event["user"]["ip_address"] = "[IP REDACTED]"
return event
sentry_sdk.init(before_send=before_send, ...)
常见上报失败原因和验证方法
部署后没看到错误?大概率卡在 DNS、代理或 SDK 初始化时机上。
- 检查
manage.py runserver启动日志里是否有Sentry is attempting to send...,没有说明 SDK 根本没初始化成功 - 用
curl -X POST http://yourdomain.com/trigger-500/(配一个故意抛ValueError的 debug view)触发真实错误,比改代码再重启快得多 - 若用 Celery,必须单独安装
sentry-sdk[integrations]并在celery.py里重复sentry_sdk.init(),Django 的初始化对 worker 进程无效 - Cloudflare 或阿里云 WAF 可能拦截
/api/store/请求,导致事件发不出去,可临时关 WAF 或在 Sentry 后台看「Client Report」里的 rejected events
最常被忽略的是:Sentry 的「Project Settings → Alerts」默认关闭所有通知,即使错误进了平台,你也收不到邮件或钉钉提醒。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











