我对这个问题感到疯狂,我相信这个问题来自 python 的sentry-sdk,可能与其他一些依赖项结合在一起。我在 Django 4.2 中有一个项目,使用sentry-sdk 2.13.0,每次在哨兵上触发某些东西时,它都会抛出一个
KeyError request
,这意味着如果报告错误,我会收到更多关于KeyError request
的错误报告(是的,它不是每完成一份报告只需 1 个)。
令我困惑的是,原始错误在哨兵上正确显示,因此我不能说哨兵 SDK 未能报告该问题。此外,每当我手动触发从代码到哨兵的信息/警告报告时,也会发生这种情况。
需要注意的是,这种情况是在将项目依赖项升级后开始发生的,尤其是 Django 到 4.2 后。
我还认为这可能是 context_processor 问题,但请求的 context_processor 位于设置中(请参阅下面的代码)
非常感谢任何帮助或建议。
这是我对哨兵的设置:
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="XXXX",
integrations=[DjangoIntegration()],
server_name='XXXX',
send_default_pii=True
)
这是错误的堆栈跟踪:
KeyError
'request'
django/template/context.py in __getitem__ at line 83
cms/templatetags/cms_tags.py in _get_empty_context at line 636
cms/templatetags/cms_tags.py in get_context at line 829
cms/templatetags/cms_tags.py in render_tag at line 810
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/loader_tags.py in render at line 54
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/base.py in render at line 177
django/template/loader_tags.py in render at line 208
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/loader_tags.py in render at line 63
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
cms/templatetags/cms_tags.py in render_tag at line 426
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
sekizai/templatetags/sekizai_tags.py in render_tag at line 86
classytags/core.py in render at line 142
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/loader_tags.py in render at line 157
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/loader_tags.py in render at line 157
django/template/base.py in render_annotated at line 966
django/template/base.py in render at line 1005
django/template/base.py in _render at line 167
django/template/base.py in render at line 175
django/template/backends/django.py in render at line 61
django/views/defaults.py in server_error at line 99
django/utils/decorators.py in _wrapper_view at line 134
django/core/handlers/exception.py in handle_uncaught_exception at line 185
django/core/handlers/exception.py in response_for_exception at line 140
django/core/handlers/exception.py in inner at line 57
django/utils/deprecation.py in __call__ at line 134
django/core/handlers/exception.py in inner at line 55
上下文处理器定义:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
...
],
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.request',
'sekizai.context_processors.sekizai',
'cms.context_processors.cms_settings',
'website.context_processors.google_analytics'
],
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'admin_tools.template_loaders.Loader',
],
},
}
]
如果我尝试重现触发所有 KeyError 的原始错误而不用哨兵报告,我只会看到原始错误而看不到 KeyError。
我更详细地检查了堆栈跟踪,但我没有弄清楚太多。只涉及cms包。
(我不知道这是否相关,但我正在使用 django-cms 3.11.6)
查看堆栈跟踪,看起来有些东西正在覆盖模板上下文。
sentry-sdk
做了一些模板修补,但如果它触及上下文,据我所知,它只是添加跟踪信息。
您可以采取哪些措施来缩小问题范围:
sentry-sdk
开发人员共享此信息,以便他们可以查看是否有任何需要调整的内容。这让我想到:sentry-sdk
存储库提出问题 ——开发人员在那里帮助调试会更容易一些。