2016-03-10 26 views
9

yolunu kesmek için nasıl özel durum yakalandı ve (her nasılsa) JobHost tarafından ele ve ardından Web'in bıçak üzerinden kullanıma sunulan gösterge tablosuna istisna kaydeder alır Webjob barındıran App. Application Insights örneğimi takabilmem için hata işlemlerini engellemenin veya geçersiz kılmanın bir yolu var mı?aa WebJob bir istisna atar zaman Azure anda bir Azure WebJob arızası/istisna

+0

kontrol şudur: Eğer bu yazı bakabilirsiniz webjob için bir iş aktivatör yapılandırmak için? http://stackoverflow.com/questions/31798640/monitoring-azure-webjobs – Igorek

cevap

2

Bazı masmavi belgelere bakın here.

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

Aslında Raygun belgelerinde benzer bir şey buldum. Bu yaklaşımdaki sorun, olası tüm atma bildirimleri için çok karışık bir istisna işleminde bulunmadıkça, iş sırasında kaydedilen herhangi bir metriği veya ekstra mülkleri garanti edemem. Eğer bu tür bir mantığa gidersem, sadece iş metodlarını doğrudan –

+0

hmmm aletine uyarlayabilirim ... Şu anda global bir mülkte depolanabilen anahtar/değer çiftlerini depolamak için bazı sözlükleri düşünüyorum. AI'ya iletilecek bilgileri saklamak için kullanılabilir. –

+0

@AlexMarshall Web işinizde bir DI Konteyner var mı? – Thomas

6

Sen Azure WebJobs SDK Extensions kullanabilirsiniz:: Sen (yukarıdaki bağlantıdan alınmıştır) AppDomain taşıma bilinmeyen istisnalara bir işleyici ekleyebilirsiniz

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(); 
    } 
} 
: Bir ErrorTrigger böylece özel duruma müdahale için kullanabileceği yoktur

, Hata uzantıları kayıt başlangıç ​​kodunda config.UseCore() aramak için: Yani eğer

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

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

bir IoC konteyneri kullanarak TelemetryClient'inizi kolayca enjekte edebilirsiniz.

İlgili konular