2016-03-10 6 views
9

वर्तमान में Azure में जब aa WebJob अपवाद फेंकता है, तो अपवाद पकड़ा जाता है और JobHost (किसी भी तरह) द्वारा संभाला जाता है और फिर वेब के ब्लेड के माध्यम से उपलब्ध डैशबोर्ड के अपवाद को लॉग करता है ऐप जिसमें वेबबॉज होस्ट किया गया है। त्रुटि प्रबंधन को अवरुद्ध करने या इसे ओवरराइड करने का कोई तरीका है ताकि मैं अपने एप्लिकेशन अंतर्दृष्टि उदाहरण में प्लग कर सकूं?एक Azure WebJob विफलता/अपवाद को कैसे रोकें

+0

चेक करें: webjob आप इस पोस्ट देख सकते हैं के लिए एक नौकरी उत्प्रेरक कॉन्फ़िगर करने के लिए? http://stackoverflow.com/questions/31798640/monitoring-azure-webjobs – Igorek

उत्तर

2

कुछ एज़ूर दस्तावेज़ 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

वास्तव में मुझे रेगुन के दस्तावेज़ों में कुछ समान मिला। इस दृष्टिकोण के साथ समस्या यह है कि मैं नौकरी के दौरान बनाए गए किसी मीट्रिक या अतिरिक्त गुणों की गारंटी नहीं दे सकता जब तक कि मैं प्रत्येक संभावित फेंक स्टेटमेंट के लिए कुछ बहुत गन्दा अपवाद प्रबंधन में निर्माण नहीं करता। अगर मैं इस तरह के तर्क में जा रहा हूं, तो मैं सिर्फ नौकरी विधियों को सीधे –

+0

हम्मम का वाद्य यंत्र भी कर सकता हूं ... मैं वर्तमान में कुछ/शब्दकोश जोड़े को स्टोर करने के लिए कुछ शब्दकोशों के बारे में सोच रहा हूं जिसे वैश्विक संपत्ति में संग्रहीत किया जा सकता है जिसका उपयोग एआई को पास करने के लिए जानकारी को स्टोर करने के लिए किया जा सकता है। –

+0

@AlexMarshall क्या आप अपने वेबोज़ में एक डी कंटेनर करते हैं? – Thomas

6

आप Azure WebJobs SDK Extensions उपयोग कर सकते हैं:: आप (ऊपर के लिंक से लिया गया) AppDomain निपटने अज्ञात अपवाद के लिए एक हैंडलर संलग्न कर सकते हैं वहाँ एक 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(); 
    } 
} 

त्रुटि एक्सटेंशन पंजीकृत करने के अपने स्टार्टअप कोड में config.UseCore() फोन:

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

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

तो अगर आप कर रहे हैं एक आईओसी कंटेनर का उपयोग करके, आप आसानी से अपने टेलीमेट्री क्लाइंट इंजेक्ट कर सकते हैं।

संबंधित मुद्दे