मैं आपको कॉल करने की सलाह दूंगा एल्माह को अपने स्वयं के एक साधारण रैपर क्लास में।
using Elmah;
public static class ErrorLog
{
/// <summary>
/// Log error to Elmah
/// </summary>
public static void LogError(Exception ex, string contextualMessage=null)
{
try
{
// log error to Elmah
if (contextualMessage != null)
{
// log exception with contextual information that's visible when
// clicking on the error in the Elmah log
var annotatedException = new Exception(contextualMessage, ex);
ErrorSignal.FromCurrentContext().Raise(annotatedException, HttpContext.Current);
}
else
{
ErrorSignal.FromCurrentContext().Raise(ex, HttpContext.Current);
}
// send errors to ErrorWS (my own legacy service)
// using (ErrorWSSoapClient client = new ErrorWSSoapClient())
// {
// client.LogErrors(...);
// }
}
catch (Exception)
{
// uh oh! just keep going
}
}
}
इसके बाद जब भी आपको कोई त्रुटि लॉग करने की आवश्यकता हो तो इसे कॉल करें।
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
इसके निम्नलिखित लाभ हैं:
- आपको एल्म कॉल के इस थोड़े पुरातन वाक्यविन्यास को याद रखने की आवश्यकता नहीं है
- यदि आपके पास कई DLL हैं, तो आपको हर एक से Elmah Core को संदर्भित करने की आवश्यकता नहीं है - और इसे अपने स्वयं के 'DLL' सिस्टम में डालें।
- यदि आपको कभी कोई विशेष हैंडलिंग करने की आवश्यकता होती है या आप केवल एक ही स्थान पर डिबग त्रुटियों के लिए एक विराम बिंदु में रखना चाहते हैं।
- यदि आप कभी भी एल्माह से दूर जाते हैं तो आप बस एक जगह बदल सकते हैं।
- यदि आपके पास विरासत त्रुटि लॉगिंग है जिसे आप बनाए रखना चाहते हैं (मैं बस एक साधारण त्रुटि लॉगिंग तंत्र है जो कुछ UI में बंधा हुआ है जिसे मेरे पास हटाने का समय नहीं है)।
नोट: मैंने प्रासंगिक जानकारी के लिए एक 'प्रासंगिक' मेसेजेज 'संपत्ति जोड़ी है। आप इसे पसंद कर सकते हैं यदि आप चाहें, लेकिन मुझे यह बहुत उपयोगी लगता है। एल्माह स्वचालित रूप से अपवादों को हटा देता है इसलिए अंतर्निहित अपवाद अभी भी लॉग में रिपोर्ट किया जाएगा, लेकिन जब आप उस पर क्लिक करते हैं तो प्रासंगिकता दिखाई देगी।