Sentry可以检测与异常相关的其他数据,例如:
如何使用自己的additional data
字段从Python(它是一个Django应用程序)中引发这样的异常?
答案 0 :(得分:9)
我使用logging
库记录异常,所以在稍微调试一下代码之后,我注意到了extra
参数:
import logging
logger = logging.getLogger('my_app_name')
def do_something():
try:
#do some stuff here that might break
except Exception, e:
logger.error(e, exc_info=1, extra={'extra-data': 'blah', })
传递exc_info = 1与调用logger.exception
相同。但是,exception()
不接受使用extra
参数所需的kwargs。
这些值将显示在Sentry Error仪表板的“附加数据”部分中。
答案 1 :(得分:4)
wes' answer没有帮助我,因为我想实际提高例外,不仅记录它。
这就是我所做的(client
是Raven Sentry客户端):
client.extra_context({'foo': 'bar'})
raise RuntimeError('Whoops, something went wrong!')
答案 2 :(得分:1)
您可以尝试以下两种方法之一:
>>> # Raise the exception with the data you want.
>>> raise Exception('extra information')
Traceback (most recent call last):
File "<pyshell#64>", line 1, in <module>
raise Exception('extra information')
Exception: extra information
>>> # Catch an exception and add extra arguments.
>>> try:
raise Exception()
except Exception as error:
error.args += ('extra information',)
raise
Traceback (most recent call last):
File "<pyshell#68>", line 2, in <module>
raise Exception()
Exception: extra information
>>>
您可以通过添加更多参数来添加任意数量的其他数据字段。
答案 3 :(得分:1)
Sentry handler在捕获异常消息时会在屏幕截图中添加该信息,并从 traceback 中获取该信息,而不是异常本身。
您可以通过将额外的关键字参数传递给.capture()
来添加额外字段;例如,如果您传入request
对象,则Django client会为您执行此操作。
目前,没有其他数据来自例外。您必须自己扩展异常处理以添加此类工具。
答案 4 :(得分:0)
现有的答案都没有很好地用于我的确切用例(这是从django Request
对象添加额外的上下文到哨兵数据中)。在进行了一些挖掘之后,使用SENTRY_CLIENT
setting覆盖客户端后,最终工作得很好。
这是一个完整的简单用例:
from raven.contrib.django.raven_compat import DjangoClient
class CustomSentryClient(DjangoClient):
def get_data_from_request(self, request):
result = super(EToolsSentryClient, self).get_data_from_request(request)
if getattr(request, 'custom_field', None):
if 'extra' not in result:
result['extra'] = {}
result['extra']['custom_field'] = request.custom_field
return result
然后在settings.py
中添加
SENTRY_CLIENT = 'myapp.CustomSentryClient'