Come utilizzare ELMAH per registrare manualmente gli errori


259

È possibile effettuare le seguenti operazioni con ELMAH?

logger.Log(" something");

Sto facendo qualcosa del genere:

try 
{
    // Code that might throw an exception 
}
catch(Exception ex)
{
    // I need to log error here...
}

Questa eccezione non verrà automaticamente registrata da ELMAH, poiché è stata gestita.


1
Per riferimento futuro, ho scritto un post su questo esattamente: Registrazione degli errori a livello di codice . Il mio tutorial ELMAH ha anche alcune informazioni a riguardo.
ThomasArdal,

Risposte:


412

Metodo di scrittura diretta dei registri, funzionante da ELMAH 1.0:

try 
{
    some code 
}
catch(Exception ex)
{
    Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(ex));
}

ELMAH 1.2 introduce un'API più flessibile:

try 
{
    some code 
}
catch(Exception ex)
{
    Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}

C'è una differenza tra le due soluzioni:

  • RaiseIl metodo applica le regole di filtro ELMAH all'eccezione. Logil metodo no.
  • Raise è basato su abbonamento ed è in grado di registrare un'eccezione nei vari logger.

1
qual è la differenza tra il tuo metodo e gli altri?
Omu,

3
Questi registrano l'errore in Elmah senza causare il blocco dell'applicazione. Ti consente di rilevare le eccezioni comuni, gestirle correttamente, ma essere comunque in grado di registrarle.
PCasagrande,

7
Ho scoperto che Elmah.ErrorSignal non stava registrando quando POST back contiene Html non sicuro per Mvc4 .Net 4.5, nel mio esempio un POST di Windows Access Control Services con SignInResponseMessage. Elmah.ErrorLog.GetDefault ha funzionato in quello scenario
Adam

1
Ho avuto lo stesso problema con HTML non sicuro. ErrorLog.GetDefault ha fatto il trucco
hgirish

4
Un grande avvertimento quando si usa Elmah.ErrorLog.Log(): si getta nel caso in cui la chiamata di registro stessa fallisca, possibilmente facendo cadere l'intera web app. Raise()fallisce silenziosamente. Ad esempio: se si verifica un problema di configurazione errata sul lato server (ad esempio Elmah è configurato per salvare gli errori sul disco, ma non ha l'accesso corretto alla cartella dei registri), il .Log()metodo verrà lanciato. (Questo è buono per il debug, ad esempio perché non .Raise()registra nulla?)
Cristian Diaconescu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.