2009-09-02 12 views
25

Puoi indicarmi alcuni tutorial o esempi su come posso registrare tutte le eccezioni non gestite che si verificano sulla mia app web mvc utilizzando log4net. Grazielog4net registra tutti gli errori dell'applicazione non gestiti

+3

Si può o non può trovare questo interessante (non sono sicuro se funzionerà con log4net): ELMAH - http://code.google.com/p/elmah/ –

+0

Grazie! In realtà ho anche collegato la mia app a Elmah mentre lavoravo a questo problema e mi piace molto l'interfaccia a portata di mano che ha. Vedo me stesso usarlo più rispetto a log4 net per ora ma vedrò come va con più esperienza .. – kaivalya

risposta

49

incollo sotto il codice che uso sul mio Global.asax che mi sembra soddisfare per ora .. io sono sempre tutte le eccezioni non gestite sul mio log4net generato i file di log ..

public class MvcApplication : System.Web.HttpApplication 
    { 

     private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication)); 

     void Application_Error(Object sender, EventArgs e) 
     { 
      Exception ex = Server.GetLastError().GetBaseException(); 

      log.Error("App_Error", ex); 
     } 


     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Home", action = "Index", id = "" } 
      ); 

     } 

     protected void Application_Start() 
     { 
      RegisterRoutes(RouteTable.Routes); 
      log4net.Config.XmlConfigurator.Configure(); 

     } 

    } 
+2

Puoi anche usare un HttpModule per registrare il gestore di eventi errore: http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx – dahlbyk

+1

Ti consigliamo di aggiungere 'routes.IgnoreRoute ("{* favicon}", new {favicon = @ "(. * /)? favicon.ico (/.*)?"}); 'al metodo RegisterRoutes se non si dispone di una favicon localizzata nel proprio sito – Tr1stan

+0

Informazioni su HttpModule: il metodo per registrare il modulo dettagliato nell'articolo collegato si applica alla vecchia modalità di pipeline di IIS classica, non alla modalità integrata (ora consigliata). Vedere https://msdn.microsoft.com/library/ms227673(v=vs.100).aspx per i dettagli su come registrarlo se si utilizza la modalità integrata. – personne3000

2

Senza essere faceto here you go.

 try 
     { 
      NotImplementedException nie = new NotImplementedException(); 
      throw nie; 
     } 
     catch (Exception e) 
     { 
      Log.Fatal(e); 
     } 

Supponendo che si sta utilizzando .NET 3.5, è possibile utilizzare metodi di estensione, ed estendere System.Exception e aggiungere un metodo log (registro log4net.ILog), quindi ovunque si cattura un'eccezione nella vostra app, supponendo hai impostato correttamente l'istanza Log, quindi lo fai facilmente. La tua classe di estensione potrebbe crescere un bel po ', con vari sovraccarichi per Debug, Info, Avvisi, Errore e Fatale ecc.

+0

scusa la mia domanda non era chiara - Devo registrare tutte le eccezioni non gestite – kaivalya

2

Potresti essere interessato a verificare cosa sia Aspect Oriented Programming (AOP).

Abbiamo realizzato questo con Post sharp (solo - non abbiamo usato log4net ma tracciante personalizzato).

Basta controllare prima se log4net non hanno qualcosa per questo 'out-of-the-box'. Non ne sono sicuro.

2

Non esiste un supporto integrato per questo in log4net. È necessario implementare the Application_Error event in Global.asax e chiamare lì il logger log4net. L'evento verrà attivato per tutti gli eventi non gestiti nella tua app.

5

per ASP.NET applicazioni che ti piace utilizzare l'evento System.Web.HttpApplication.Error che viene inserito nel file Global.asax.

protected void Application_Error(Object sender, EventArgs e) 
{ 
    Exception ex = Server.GetLastError(); 

    // Stop error from displaying on the client browser 
    Context.ClearError(); 

    logger.Fatal(ex.ToString); 

} 

guardare Managing unhandled exceptions

Problemi correlati