2011-07-11 5 views

Respuesta

9

Creo que el uso que utiliza tanto ELMAH y Log4Net (o NLog). Usar ambos te dará la mayor flexibilidad. Desearía poder entrar en detalles extremos en este momento, pero al menos quería responderte y decirte que el uso de AMBOS es la mejor solución de lo que he experimentado y de lo que he leído que otros han hecho. Por favor, hágamelo saber si necesita explicaciones, etc.

5

Habíamos sido una tienda puramente Log4Net hasta que Log4net dejó de registrarnos en producción en numerosas ocasiones. Para evitar que esto ocurra, decidimos implementar ELMAH para toda nuestra aplicación (incluso para el registro básico). No podríamos estar más contentos con los resultados ya que todas nuestras declaraciones de registro aparecen en un solo lugar y no hay más archivos de texto que atravesar (a menos que quisiéramos atravesar los archivos XML). Mantuvimos Log4Net para una iteración más, pero finalmente encontramos que es de poca utilidad y lo hemos eliminado completamente de nuestra aplicación.

Veo por qué es posible que desee tener dos marcos de trabajo de registro diferentes para un sitio, especialmente dado que ELMAH requiere un HttpContext para trabajar en todo su potencial. Sin embargo, encontramos una manera de pasar la excepción a ELMAH sin un HttpContext:

 /// <summary> 
     /// Main logger method that will log an exception and/or a message 
     /// </summary> 
     /// <param name="exception">Exception to log</param> 
     /// <param name="message">Message to log</param> 
     private static void Log(Exception exception, string message) 
     { 
       Error elmahError = exception != null ? new Error(exception) : new Error(); 

       if (!string.IsNullOrWhiteSpace(message)) 
       { 
        elmahError.Message = message; 
       } 

       Elmah.ErrorLog.GetDefault(null).Log(elmahError);    
     } 

Luego, en su web.config sólo tiene que especificar el applicationName:

<elmah> 
    <security allowRemoteAccess="1" /> 
    <errorLog name="ELMAHLogger" applicationName="xxx" type="Elmah.XmlFileErrorLog, Elmah" logPath="~/ELMAH_Production_Logs" /> 
    </elmah> 

Una vez más, creo que Log4net es un buen marco de trabajo y nos funcionó durante varios años. Creo que ELMAH es más fácil de usar cuando busco una excepción y el código anterior nos ha permitido usarlo en cualquier lugar de nuestra aplicación donde HttpContext podría no estar disponible.

+0

Tenía curiosidad así que encontré una buena respuesta al uso de ambos aquí: [Usando tanto ELMAH como Log4Net] (http://stackoverflow.com/questions/800009/using-log4net-and-where-to-implement-it -and-usign-with-elmah/800045 # 800045) –

+0

@Tom - Sí, sé que puedes usar ambos y lo hice por un tiempo, pero mi respuesta fue que no necesariamente tienes que hacerlo y que puedes usar ELMAH para todas sus necesidades de registro. – amurra

+1

Según el enlace que utilicé "Se usan para dos propósitos diferentes". Además de que ELMAH es solo para sitios web, a algunos de nosotros también nos gusta usar Log4Net para aplicaciones de cliente grueso. Olvidarme de un producto sólido "básico" como Log4Net no es lo que prefiero. "Log4net, por otro lado, es para registrar eventos (incluidos errores causados ​​por excepciones) que sabía que podrían suceder (de lo contrario, no tendría un bloque try/catch)". Me gusta usar ELMAH y Log4Net en aplicaciones MVC. Pero claro, el desarrollo de software es más un "Arte" y no una "Ciencia" –

Cuestiones relacionadas