2009-09-02 9 views
25

¿Me puede apuntar a algunos tutorial o muestras de cómo me puedo registrar todas las excepciones no controladas que se están produciendo en mi aplicación web MVC usando log4net. Graciaslog4net registrar todos los errores de aplicación no controladas

+3

Usted puede o no puede encontrar este interesante (no estoy seguro si va a trabajar con log4net): ELMAH - http://code.google.com/p/elmah/ –

+0

Gracias! De hecho, también enganché mi aplicación a Elmah mientras trabajaba en este problema y realmente me gusta la interfaz práctica que tiene. Me veo usarlo más en comparación con log4 net por ahora, pero veré cómo va eso con más experiencia. – kaivalya

Respuesta

49

pego a continuación el código que uso en mi Global.asax que me parece satisfacer por ahora .. Me estoy haciendo todas las excepciones no controladas en mi log4net genera archivos de registro ..

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

También puede usar un HttpModule para registrar el controlador de eventos de error: http://codebetter.com/blogs/karlseguin/archive/2006/06/12/146356.aspx – dahlbyk

+1

Usted querrá agregar 'routes.IgnoreRoute ("{*} favicon", nueva {favicon = @ "(. * /)? favicon.ico (/.*)?"}); 'a su método RegisterRoutes si no tiene un favicon ubicado dentro de su sitio – Tr1stan

+0

Acerca de HttpModule: el método para registrar el módulo detallado en el artículo vinculado se aplica al antiguo modo de canal IIS clásico, no al modo integrado (ahora recomendado). Consulte https://msdn.microsoft.com/library/ms227673(v=vs.100).aspx para obtener detalles sobre cómo registrarlo si usa el modo integrado. – personne3000

2

Sin ser gracioso here you go.

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

Suponiendo que está utilizando .NET 3.5, puede utilizar los métodos de extensión, y extender System.Exception y añadir un método de registro (log log4net.ILog), a continuación, siempre que se captura una excepción en su aplicación, suponiendo que He configurado la instancia de registro correctamente, luego lo haces fácilmente. Su clase de extensión podría crecer un poco, con varias sobrecargas de depuración, información, warn, error fatal y etc.

+0

lo siento, mi pregunta no era clara. Necesito registrar todas las excepciones no controladas – kaivalya

2

que podría estar interesado para comprobar lo que Aspect Oriented Programming (AOP) es.

Hemos logrado esto con Post sharp (sólo - no usamos pero log4net trazador de medida).

Sólo tienes que comprobar primero si log4net no tienen algo de esto 'hacia fuera-de-la-caja'. No estoy seguro de eso.

2

No hay soporte incorporado para esto en log4net. Debe implementar the Application_Error event en Global.asax y llame al log lognet allí. El evento se activará para todos los eventos no administrados en su aplicación.

5

para ASP.NET aplicaciones que le gusta usar el evento System.Web.HttpApplication.Error que se coloca en el archivo 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); 

} 

ver Managing unhandled exceptions

Cuestiones relacionadas