Saya akan merekomendasikan membungkus panggilan ke Elmah dalam kelas pembungkus sederhana Anda sendiri.
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
}
}
}
Kemudian panggil saja setiap kali Anda perlu mencatat kesalahan.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
Ini memiliki manfaat sebagai berikut:
- Anda tidak perlu mengingat sintaks panggilan Elmah yang sedikit kuno ini
- Jika Anda memiliki banyak DLL, Anda tidak perlu merujuk Elmah Core dari setiap satu - dan cukup letakkan ini di DLL 'Sistem' Anda sendiri.
- Jika Anda perlu melakukan penanganan khusus atau hanya ingin memasukkan breakpoint ke kesalahan debug Anda memiliki semuanya satu tempat.
- Jika Anda pernah pindah dari Elmah Anda hanya dapat mengubah satu tempat.
- Jika Anda memiliki pendataan kesalahan lama yang ingin Anda pertahankan (Saya kebetulan memiliki mekanisme pendataan kesalahan sederhana yang terkait dengan beberapa UI yang saya tidak segera punya waktu untuk menghapusnya).
Catatan: Saya telah menambahkan properti 'kontekstualMessage' untuk informasi kontekstual. Anda dapat menghilangkan ini jika Anda mau tetapi saya merasa sangat berguna. Elmah secara otomatis membuka bungkus pengecualian sehingga pengecualian yang mendasarinya masih akan dilaporkan dalam log tetapi Pesan kontekstual akan terlihat ketika Anda mengkliknya.