哨兵可以檢測異常,如相關的其他數據:你如何提出python異常併爲Sentry添加其他數據?
你如何用自己的additional data
領域提高在Python(這是一個Django應用程序)這樣的異常?
哨兵可以檢測異常,如相關的其他數據:你如何提出python異常併爲Sentry添加其他數據?
你如何用自己的additional data
領域提高在Python(這是一個Django應用程序)這樣的異常?
我登錄使用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儀表板的「其他數據」部分。
就是這樣。如果您使用的是Raven客戶端,您可以:[「將它作爲您的額外子句中的數據傳遞]」(http://raven.readthedocs.org/en/latest/config/logging.html)'例如:logger.error( '有一些瘋狂的錯誤',exc_info = True,extra = {'data':{'username':request.user.username}})' – AJP 2013-10-25 12:25:45
這並沒有真正回答這個問題。 'logger.error(...)'不會重新引發異常,所以它會吞下它並繼續。你會如何用額外的數據引發異常? – dAnjou 2015-04-29 12:37:20
你可以嘗試這兩種方法之一:
>>> # 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
>>>
,您可以根據需要添加更多的參數添加任意數量的數據字段。
Sentry handler在捕獲異常消息時在屏幕截圖中添加了該信息,並從回溯中獲取該信息,而不是異常本身。
您可以通過將額外的關鍵字參數傳遞給.capture()
來添加額外的字段;例如,如果您通過request
對象,則Django client會爲您提供幫助。
目前,沒有其他數據來自例外。您必須自己擴展異常處理才能添加這樣的工具。
wes' answer沒有幫助我,因爲我想實際加薪例外,不僅記錄它。
這裏就是我所做的(client
是烏鴉衛士客戶端):
client.extra_context({'foo': 'bar'})
raise RuntimeError('Whoops, something went wrong!')
無現有的答案擔任我的確切使用情況以及(這是從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'
'raise'採取任何類或實例。你能更清楚你在問什麼嗎? – 2013-04-11 14:17:58
你想添加什麼額外的數據? – mgilson 2013-04-11 14:18:02
offtopic - 但你的截圖從哪裏來?爲什麼我在django中沒有這麼漂亮的例外? - 編輯:對不起,這是哨兵。 – user1688936 2013-04-11 14:27:06