Sentry może wykryć dodatkowe dane skojarzone z wyjątkiem takich jak:Jak podnieść wyjątek Pythona i dołączyć dodatkowe dane dla Sentry?
Jak podnieść taki wyjątek od Python (jest to aplikacja Django) z własnymi additional data
pól ?.
Sentry może wykryć dodatkowe dane skojarzone z wyjątkiem takich jak:Jak podnieść wyjątek Pythona i dołączyć dodatkowe dane dla Sentry?
Jak podnieść taki wyjątek od Python (jest to aplikacja Django) z własnymi additional data
pól ?.
I wyjątków przy użyciu biblioteki logging
zalogować więc po debugowanie kodu trochę zauważyłem parametr 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', })
Passing exc_info = 1 jest taka sama jak wywołanie logger.exception
. Jednak exception()
nie przyjmuje kwargs, które są wymagane do korzystania z parametru extra
.
Te wartości pojawią się w sekcji "Dane dodatkowe" na pulpicie błędu Sentry.
To jest to. Jeśli używasz klienta Raven, możesz: ["przekazać go jako dane w dodatkowej klauzuli"] (http://raven.readthedocs.org/en/latest/config/logging.html) 'eg: logger.error ("Wystąpił jakiś szalony błąd", exc_info = True, extra = {'data': {'username': request.user.username}}) ' – AJP
To tak naprawdę nie odpowiada na pytanie. 'logger.error (...)' nie spowoduje ponownego podniesienia wyjątku, więc po prostu go połknie i będzie kontynuował. W jaki sposób zgłosisz wyjątek z dodatkowymi danymi? – dAnjou
Można spróbować jednego z tych dwóch podejść:
>>> # 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
>>>
Można dodać dowolną liczbę dodatkowych pól danych, jak chcesz, dodając więcej argumentów.
Sentry handler dodaje, że informacje w zrzucie ekranu podczas przechwytywania wiadomości za wyjątek i bierze te informacje z traceback, a nie sam wyjątków.
Możesz dodać dodatkowe pola, przekazując dodatkowe argumenty słów kluczowych do .capture()
; Django client zrobi to za Ciebie, jeśli przejdziesz na przykład do obiektu request
.
Obecnie żadne inne dane nie pochodzą z wyjątków. Trzeba samemu rozszerzyć obsługę wyjątków, aby dodać taki obiekt.
wes' answer mi nie pomoże, ponieważ chcę, aby rzeczywiście podbicie wyjątek nie tylko zalogować go.
Oto co zrobiłem (client
jest klient Raven Sentry):
client.extra_context({'foo': 'bar'})
raise RuntimeError('Whoops, something went wrong!')
Żadna z istniejących odpowiedzi służył mój dokładny przypadek użycia dobrze (co było dodać dodatkowy kontekst z obiektu django Request
do wartownika dane). Co skończyło się na tym, że bardzo dobrze działało, po tym, jak niektóre kopanie zastąpiło klienta przy użyciu SENTRY_CLIENT
setting.
Oto pełna prosty przypadek użycia:
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
a następnie w settings.py
byłoby po prostu dodać
SENTRY_CLIENT = 'myapp.CustomSentryClient'
'raise' bierze żadnej klasy lub instancji. Czy możesz być jaśniejszy o to, o co prosisz? –
Jakie dodatkowe dane chcesz dodać? – mgilson
offtopic - ale skąd pochodzi zrzut ekranu? dlaczego nie mam tak ładnych wyjątków w django? - edytuj: przepraszam, to jest sentry. – user1688936