Suggerirei di completare la chiamata a Elmah in una semplice classe di wrapper.
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
}
}
}
Quindi basta chiamarlo ogni volta che è necessario registrare un errore.
try {
...
}
catch (Exception ex)
{
// log this and continue
ErrorLog.LogError(ex, "Error sending email for order " + orderID);
}
Questo offre i seguenti vantaggi:
- Non è necessario ricordare questa sintassi un po 'arcaica della chiamata Elmah
- Se si dispone di molte DLL non è necessario fare riferimento Elmah Core da ogni singolo - e basta mettere questo nella propria DLL 'System'.
- Se è necessario eseguire una gestione speciale o si desidera semplicemente inserire un punto di interruzione per eseguire il debug degli errori, è necessario disporre di un'unica posizione.
- Se ti sposti da Elmah, puoi semplicemente cambiare un posto.
- Se si desidera mantenere la registrazione degli errori legacy che si desidera conservare (ho solo un semplice meccanismo di registrazione degli errori collegato a delle interfacce utente che non ho immediatamente il tempo di rimuovere).
Nota: ho aggiunto una proprietà 'contextualMessage' per informazioni contestuali. Puoi omettere questo se preferisci, ma lo trovo molto utile. Elmah annulla automaticamente le eccezioni in modo che l'eccezione sottostante venga comunque segnalata nel log ma il contextualMessage sarà visibile quando si fa clic su di esso.
fonte
2013-02-08 10:09:23
Per riferimento futuro, ho scritto un post su esattamente questo: [registrazione degli errori di programmazione] (http://docs.elmah.io/logging-errors-programmatically/). Anche il mio [ELMAH Tutorial] (http://blog.elmah.io/elmah-tutorial/) ha alcune informazioni a riguardo. – ThomasArdal