15

Sentry 可以检测与异常相关的其他数据,例如:

在此处输入图像描述

你如何用你自己的additional data字段从 Python(它是一个 Django 应用程序)中引发这样的异常?

4

5 回答 5

14

我使用库记录异常,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()不接受使用参数所需的 kwargs extra

这些值将显示在 Sentry Error 仪表板的“附加数据”部分。

于 2013-10-16T21:59:53.600 回答
4

wes 的回答对我没有帮助,因为我想实际提出一个异常,而不仅仅是记录它。

这是我所做的(client是 Raven Sentry 客户端):

client.extra_context({'foo': 'bar'})
raise RuntimeError('Whoops, something went wrong!')
于 2015-04-29T17:40:22.170 回答
2

您可以尝试以下两种方法之一:

>>> # 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
>>> 

您可以通过添加更多参数来添加任意数量的附加数据字段。

于 2013-04-11T14:21:56.120 回答
1

Sentry 处理程序在捕获异常消息时在您的屏幕截图中添加该信息,并从 traceback 获取该信息,不是异常本身。

.capture()您可以通过向;传递额外的关键字参数来添加额外的字段 例如,如果您传入对象,Django 客户端会为您执行此操作。request

目前,没有从异常中获取其他数据。您必须自己扩展异常处理才能添加这样的设施。

于 2013-04-11T14:38:54.530 回答
0

现有的答案都不能很好地满足我的确切用例(即从 djangoRequest对象添加额外的上下文到哨兵数据中)。经过一番挖掘后,最终效果很好的是使用该SENTRY_CLIENT设置覆盖了客户端。

这是一个完整的简单用例:

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'
于 2017-08-09T21:40:22.557 回答