Skip to main content
 首页 » 编程设计

python之使用 SUDS Python WSDL 客户端和 Django Sentry,具有 __sentry__ 属性的异常

2024年08月30日33三少

当在 Django 应用程序中使用 SUDS 以及 Sentry 错误日志记录时,我遇到了一个问题,即 SUDS 引发错误,而 Sentry 试图处理它,但严重失败并导致服务器 500:

[Wed Sep 14 16:06:22 2011] [error] Unable to process log entry: plugin domain (__sentry__), invalid 
[Wed Sep 14 16:06:22 2011] [error] Traceback (most recent call last): 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/client/models.py", line 38, in sentry_exception_handler 
[Wed Sep 14 16:06:22 2011] [error]     message_id = get_client().create_from_exception(**extra) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/client/base.py", line 220, in create_from_exception 
[Wed Sep 14 16:06:22 2011] [error]     frames = varmap(shorten, reporter.get_traceback_frames()) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap 
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var] 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 66, in varmap 
[Wed Sep 14 16:06:22 2011] [error]     ret = dict((k, varmap(func, v, context)) for k, v in var.iteritems()) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 66, in <genexpr> 
[Wed Sep 14 16:06:22 2011] [error]     ret = dict((k, varmap(func, v, context)) for k, v in var.iteritems()) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap 
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var] 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 68, in varmap 
[Wed Sep 14 16:06:22 2011] [error]     ret = [varmap(func, f, context) for f in var] 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 70, in varmap 
[Wed Sep 14 16:06:22 2011] [error]     ret = func(var) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 235, in shorten 
[Wed Sep 14 16:06:22 2011] [error]     var = transform(var) 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/sentry/helpers.py", line 101, in transform 
[Wed Sep 14 16:06:22 2011] [error]     callable(getattr(value, '__sentry__', None)): 
[Wed Sep 14 16:06:22 2011] [error]   File "/opt/envs/xxxx/lib/python2.6/site-packages/suds/plugin.py", line 208, in __getattr__ 
[Wed Sep 14 16:06:22 2011] [error]     raise Exception, 'plugin domain (%s), invalid' % name 
[Wed Sep 14 16:06:22 2011] [error] Exception: plugin domain (__sentry__), invalid 

Sentry 和 SUDS 好像玩的不太好...?

请您参考如下方法:

看起来 SUDS 实际上在其插件文件中抛出错误类型,因此 Sentry 无法处理它(Sentry 尝试在引发异常的对象上调用 __sentry__,我猜测期望返回一个 AttributeError。SUDS 只是引发一个(旧式)异常......

参见:https://fedorahosted.org/suds/browser/trunk/suds/plugin.py#L208

也许对其进行修补以引发 AttributeError...但这可能不是最佳解决方案...还有其他解决方案吗?