2016-03-10 65 views
9

現在、WebJobが例外をスローすると、Azureで例外がキャッチされ、JobHostによって処理され、Webのブレードから利用可能なダッシュボードに例外が記録されますwebjobがホストされているアプリケーション。エラー処理を傍受したり、Application Insightsインスタンスをプラグインできるようにオーバーライドする方法はありますか?Azure WebJobの失敗/例外を傍受する方法

+0

チェックこの:あなたがこの記事を見ることができwebjobのジョブ活性化因子を設定するには? http://stackoverflow.com/questions/31798640/monitoring-azure-webjobs – Igorek

答えて

2

紺碧のドキュメントhereをご覧ください。あなたは(上記のリンクから取られた)AppDomain取り扱いの未知の例外にハンドラをアタッチすることができます

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 

// ... 

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    ExceptionTelemetry excTelemetry = new ExceptionTelemetry((Exception)e.ExceptionObject); 
    excTelemetry.SeverityLevel = SeverityLevel.Critical; 
    excTelemetry.HandledAt = ExceptionHandledAt.Unhandled; 

    telemetryClient.TrackException(excTelemetry); 

    telemetryClient.Flush(); 
} 
+0

実際、私はRaygunのドキュメントで似たようなものを見つけました。このアプローチの問題は、可能なすべてのスロー・ステートメントに対して非常に面倒な例外処理を構築しない限り、ジョブ中に構築したメトリックまたは追加プロパティーが記録されることを保証できないということです。私はそのような種類のロジックに行くならば、私はちょうど直接仕事方法を測定するかもしれません –

+0

hmmm ...私は現在、グローバルプロパティに格納することができるキー/値のペアを格納するいくつかの辞書を考えていますAIに渡す情報を格納するために使用することができます。 –

+0

@AlexMarshallあなたのwebjobにDIコンテナはありますか? – Thomas

6

あなたはAzure WebJobs SDK Extensionsを使用することができます。ErrorTriggerがあり、あなたが処理されない例外をインターセプトするために使用できるように:

public class UnhandledErrorTrigger : IDisposable 
{ 
    private readonly TelemetryClient _telemetryClient; 

    public UnhandledErrorTrigger(TelemetryClient telemetryClient) 
    { 
     _telemetryClient = telemetryClient; 
    }    

    public void UnHandledException([ErrorTrigger("0:01:00", 1)] TraceFilter filter, TextWriter log) 
    { 
     foreach (var traceEvent in filter.Events) 
     { 
      _telemetryClient.TrackException(traceEvent.Exception); 
     } 

     // log the last detailed errors to the Dashboard 
     log.WriteLine(filter.GetDetailedMessage(1)); 
    } 

    public void Dispose() 
    { 
     _telemetryClient.Flush(); 
    } 
} 

private static void Main() 
{ 
    var config = new JobHostConfiguration(); 
    config.UseCore(); 

    ... 
    new JobHost(config).RunAndBlock(); 
} 

だから、あなたがしている場合:スタートアップコードでconfig.UseCore()を呼び出し、エラーの拡張子を登録するには

IoCコンテナを使用すると、簡単にTelemetryClientを注入できます。

関連する問題