应使用sentry-sdk替代已废弃的raven,运行pip install sentry-sdk≥1.0.0,在settings.py末尾调用sentry_sdk.init()初始化,dsn须从sentry控制台复制完整url,debug=false时自动上报,需注意异步上下文与敏感数据过滤。

安装sentry-sdk并配置Django设置
直接用 sentry-sdk 替代已废弃的 raven,这是当前唯一推荐路径。不装错包、不配旧文档,否则根本收不到错误。
- 运行
pip install sentry-sdk,确保版本 ≥ 1.0.0(老版本对 Django 4+ 支持不全) - 在
settings.py最底部添加初始化代码,**不能放在中间**,否则中间件或日志模块可能未加载完成 -
SENTRY_DSN必须从 Sentry 项目设置页复制完整 URL(含https://xxx@oxxx.ingest.sentry.io/xxx格式),少一个字符都会静默失败 - 建议启用
traces_sample_rate=1.0仅用于开发环境,生产环境设为0.1或更低,避免性能拖累
验证Django异常是否真被Sentry捕获
光看控制台没报错 ≠ 错误已上报。Sentry 默认不阻塞请求,失败时只打本地日志,容易误判成功。
- 在视图里主动抛异常测试:
raise ValueError("test sentry capture") - 检查 Django 日志输出里是否有
Sentry is attempting to send或Failed to submit event—— 这是唯一可信的本地反馈 - 别只刷 Sentry Web UI 等“出现”,首次上报有 5–30 秒延迟;若 2 分钟后仍无,大概率是 DSN 错、网络策略拦截(如公司代理/防火墙)、或
send_default_pii=False导致敏感字段被过滤后事件被丢弃 - 本地开发时加
debug=True参数,能强制打印更详细的上报日志:sentry_sdk.init(..., debug=True)
处理Django中间件和异步任务中的异常
Django 的中间件错误、celery 任务、或 async def 视图里的异常,默认不会进 Sentry,因为 SDK 初始化时没接管这些执行上下文。
- 对 Celery:必须单独集成,不能只靠 Django 配置。在
celery.py中调用sentry_sdk.init(),并加上integrations=[CeleryIntegration()] - 对 ASGI 应用(如 Django 4+ 的 async view):确认使用的是
asgi.py启动方式,并在其中初始化 SDK;WSGI 模式下 async view 的异常可能漏报 - 自定义中间件抛出的异常,需确保它没被上层 try/catch 吞掉且没调用
response.status_code = 500后返回 —— Sentry 只捕获未处理异常,不捕获手动构造的 500 响应
过滤敏感数据与减少噪声事件
默认配置会把所有 request.POST、headers、user.id 全发过去,既违规又撑爆 quota。不设过滤,上线三天就可能触发 Sentry 的事件限频。
- 禁用 PII 默认发送:
send_default_pii=False(必须显式关) - 用
before_send回调过滤字段:before_send=lambda event, hint: None if "password" in str(event) else event - 忽略已知良性错误,比如
DisallowedHost(DNS 劫持或扫描器请求):ignore_errors=[DisallowedHost] - 区分环境:用
environment=os.environ.get("DJANGO_ENV", "development"),避免 staging 和 prod 数据混在一起难排查
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











