2013-04-11 3 views
9

歩哨のような例外に関連付けられた追加データを検出することができますどのようにして、Python例外を発生させ、Sentryの追加データを含めるのですか?

enter image description here

をどのようにあなた自身のadditional dataフィールドで(それはDjangoのアプリです)パイソンから、このような例外を発生させます?。

+0

を追加し 'raise'は、任意のクラスまたはインスタンスを取ります。あなたはあなたが求めていることをもっと明確にすることができますか? –

+0

どのような追加データを追加しますか? – mgilson

+0

offtopic - あなたのスクリーンショットはどこからですか?なぜ私はジャンゴでそのようなかなりの例外を持っていないのですか? - 編集:申し訳ありません、それはsentryです。 – user1688936

答えて

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ダッシュボードの「追加データ」セクションに表示されます。私は実際に昇給例外、だけでなくにそれをログに記録したいので

+0

これはそれです。 Ravenクライアントを使用している場合は、次のようにすることができます:["extra clause内のデータとして渡す"](http://raven.readthedocs.org/en/latest/config/logging.html) '例:logger.error( exc_info = True、extra = {'data':{'username':request.user.username}}) ' – AJP

+1

これは本当に質問に答えるものではありません。 'logger.error(...)'は例外を再発生させないので、それを飲み込んで継続します。あなたは実際に追加データを使ってどのように例外を発生させますか? – dAnjou

1

あなたはこれらの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 
>>> 

あなたは多くの追加データフィールドを追加することができます。

1

Sentry handlerは、例外のメッセージをキャプチャするときにスクリーンショットにその情報を追加し、その情報をトレースバックから取得します。例外は例外ではありません。

余分なキーワード引数を.capture()に渡すことで、余分なフィールドを追加できます。例えばrequestオブジェクトを渡した場合、Django clientはそうします。

現在のところ、例外から他のデータは取得されません。そのような機能を追加するには、例外処理を拡張する必要があります。

1

wes' answerは私を助けていません。ここで

は(clientはレイヴンSentryのクライアントである)私がやったことだ:既存の回答の

client.extra_context({'foo': 'bar'}) 
raise RuntimeError('Whoops, something went wrong!') 
0

どれもよく私の正確なユースケースを提供していません(歩哨にジャンゴ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' 
関連する問題