2009-03-24 11 views
13

Parece que Log4Net se cierra silenciosamente por razones que no son obvias, y no sé cómo solucionarlo. Mi corazonada es que un appender en particular está fallando en un mensaje de registro específico y parece cerrar toda la pila.¿Cómo se soluciona uno log4net cuando deja de iniciar sesión?

¿Hay alguna manera de hacer que Log4Net genere una excepción (al menos durante nuestra fase de depuración) en lugar de un cierre lento del servicio?

Respuesta

13

Creo que hay un valor de configuración se puede poner en la sección de appSettings su app.config/web.config para encender instrucciones de depuración internas en log4net:

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

esto le dará una idea de cualquier errores que log4net podría estar tragando.

+5

Después de un poco más de excavación (siguiendo el puntero para habilitar la depuración interna, parece que se habilita un detector para el System.Diagnostics.Trace también es necesario. –

+3

También se debe tener en cuenta que appSettings debe ir antes que el sistema.atributo de diagnóstico. – Dan

22

Ampliando la respuesta anterior -

Para añadir un escucha de seguimiento de la traza log4net.Internal.Debug, añadir esto a la aplicación de configuración:

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\temp\log4net.txt" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

Sustituir el valor del atributo initializeData arriba con su ruta de archivo de registro deseada. Asegúrese de que la aplicación o el proceso del servidor ASP.NET tenga permiso para escribir en este archivo.

Otra cosa que puede hacer es inspeccionar los mensajes que se devuelven desde la configuración de log4net al inicio. A partir de la versión 1.2.11 de log4net, los métodos XmlConfigurator.Configure() devuelven un ICollection que contiene cadenas que enumeran los problemas encontrados durante el proceso de configuración.

Así que si usted tiene algo como esto:

XmlConfigurator.Configure(); 

cambio a

ICollection configMessages = XmlConfigurator.Configure(); 

e inspeccionar configMessages en un depurador, o imprimirlas en algún lugar, por ejemplo,

foreach (string msg in configMessages) 
{ 
    Console.WriteLine(msg); 
} 

Si todo lo demás falla, descargar el código fuente log4net, agregar el proyecto a la solución, y hacer referencia al proyecto en lugar de log4net.dll. Ahora puede ingresar a las llamadas de log4net en el depurador.

0

Estaba pasando un momento difícil para descubrir por qué el archivo de registro y los apiladores de registro sql no funcionaban. Cambié la tabla SQL predeterminada y resultó que el tipo de datos Int no era bueno y Int32 era el valor correcto. No pude encontrar esta información hasta que depuré en Visual Studio y entré en el método de registro. La ejecución del método se detuvo en mi punto de interrupción y me encontré con el comando de instalación en la ventana Inmediato:

log4net.Config.XmlConfigurator.Configure()

pude ver información inmediata y no había en el hecho una excepción lanzada cuando se ejecutó ese código de configuración. Se mostró en la ventana Inmediato y pude abordar el problema.

Espero que esto ayude a alguien.

Cuestiones relacionadas