Elmah'a yaptığınız çağrıyı kendinize ait basit bir sarmalayıcı sınıfına almanızı tavsiye ederim.
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
}
}
}
Ardından, bir hata günlüğe kaydetmeniz gerektiğinde arayın.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
Bunun aşağıdaki faydaları vardır:
- Elmah çağrısının bu biraz arkaik sözdizimini hatırlamanıza gerek yok
- Çok sayıda DLL'niz varsa, Elmah Core'a her birinden başvurmanız gerekmez ve bunu kendi 'Sistem' DLL'nize koyun.
- Herhangi bir özel işlem yapmanız gerekiyorsa veya sadece hataları ayıklamak için bir kesme noktası koymak istiyorsanız, hepsi tek bir yere sahip olursunuz.
- Elmah'tan uzaklaşırsanız, sadece bir yeri değiştirebilirsiniz.
- Korumak istediğiniz eski hata günlüğünüz varsa (hemen kaldırmak için zamanım olmayan bazı kullanıcı arayüzlerine bağlı basit bir hata günlüğü mekanizmasına sahibim).
Not: İçerik bilgileri için bir 'contextualMessage' özelliği ekledim. İsterseniz bunu atlayabilirsiniz, ancak çok yararlı buluyorum. Elmah, istisnaları otomatik olarak açar, böylece altta yatan istisna günlükte hala raporlanır, ancak üzerine tıkladığınızda contextualMessage görülebilir.