ฉันขอแนะนำให้คุณโทรไปที่ Elmah ในชั้นเรียนของคุณเอง
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);
}
สิ่งนี้มีประโยชน์ดังต่อไปนี้:
- คุณไม่จำเป็นต้องจำไวยากรณ์ที่เก่าแก่เล็กน้อยของการโทร Elmah
 
- หากคุณมี DLLs จำนวนมากคุณไม่จำเป็นต้องอ้างอิง Elmah Core จากทุก ๆ หนึ่ง - และเพียงแค่ใส่ค่านี้ใน 'System' DLL ของคุณเอง
 
- หากคุณต้องการจัดการเป็นพิเศษหรือเพียงต้องการเบรกพอยต์เพื่อแก้ไขข้อผิดพลาดคุณมีทั้งหมดในที่เดียว
 
- หากคุณย้ายออกจาก Elmah คุณสามารถเปลี่ยนที่เดียวได้
 
- หากคุณมีการบันทึกข้อผิดพลาดดั้งเดิมที่คุณต้องการเก็บไว้ (ฉันเพิ่งเกิดขึ้นกับกลไกการบันทึกข้อผิดพลาดแบบง่ายที่ผูกกับ UIs บางอย่างที่ฉันไม่มีเวลาลบทันที)
 
หมายเหตุ: ฉันได้เพิ่มคุณสมบัติ 'contextualMessage' สำหรับข้อมูลเชิงบริบท คุณสามารถละเว้นสิ่งนี้หากคุณต้องการ แต่ฉันคิดว่ามันมีประโยชน์มาก Elmah จะแยกข้อยกเว้นโดยอัตโนมัติดังนั้นข้อยกเว้นที่พื้นฐานจะยังคงถูกรายงานในบันทึก แต่บริบทจะมองเห็นข้อความเมื่อคุณคลิกที่มัน