歩哨のような例外に関連付けられた追加データを検出することができますどのようにして、Python例外を発生させ、Sentryの追加データを含めるのですか?
をどのようにあなた自身のadditional data
フィールドで(それはDjangoのアプリです)パイソンから、このような例外を発生させます?。
歩哨のような例外に関連付けられた追加データを検出することができますどのようにして、Python例外を発生させ、Sentryの追加データを含めるのですか?
をどのようにあなた自身のadditional data
フィールドで(それは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()
は、extra
パラメータの使用に必要なkwargsを受け入れません。
これらの値は、Sentry Errorダッシュボードの「追加データ」セクションに表示されます。私は実際に昇給例外、だけでなくにそれをログに記録したいので
これはそれです。 Ravenクライアントを使用している場合は、次のようにすることができます:["extra clause内のデータとして渡す"](http://raven.readthedocs.org/en/latest/config/logging.html) '例:logger.error( exc_info = True、extra = {'data':{'username':request.user.username}}) ' – AJP
これは本当に質問に答えるものではありません。 'logger.error(...)'は例外を再発生させないので、それを飲み込んで継続します。あなたは実際に追加データを使ってどのように例外を発生させますか? – dAnjou
あなたはこれらの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
>>>
あなたは多くの追加データフィールドを追加することができます。
Sentry handlerは、例外のメッセージをキャプチャするときにスクリーンショットにその情報を追加し、その情報をトレースバックから取得します。例外は例外ではありません。
余分なキーワード引数を.capture()
に渡すことで、余分なフィールドを追加できます。例えばrequest
オブジェクトを渡した場合、Django clientはそうします。
現在のところ、例外から他のデータは取得されません。そのような機能を追加するには、例外処理を拡張する必要があります。
wes' answerは私を助けていません。ここで
は(client
はレイヴンSentryのクライアントである)私がやったことだ:既存の回答の
client.extra_context({'foo': 'bar'})
raise RuntimeError('Whoops, something went wrong!')
どれもよく私の正確なユースケースを提供していません(歩哨にジャンゴ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'は、任意のクラスまたはインスタンスを取ります。あなたはあなたが求めていることをもっと明確にすることができますか? –
どのような追加データを追加しますか? – mgilson
offtopic - あなたのスクリーンショットはどこからですか?なぜ私はジャンゴでそのようなかなりの例外を持っていないのですか? - 編集:申し訳ありません、それはsentryです。 – user1688936