2010-02-14 10 views
30

Actualmente estoy construyendo una aplicación ASP.Net-MVC usando log4net para el registro, pero el registrador parece detenerse al azar. Felizmente se registrará durante un tiempo y luego se detendrá, y luego comenzará nuevamente después de un período de tiempo. Ni siquiera estoy seguro de qué es lo que lo hace reanudar el registro. No estoy hablando solo de unos pocos mensajes que se pierden, a veces desaparece por un largo período de tiempo, como una hora más o menos.Log4net deja de registrar aleatoriamente.

¿Por qué se detendría y comenzaría de esta manera? ¿Cómo debo configurar esto adecuadamente para que no se detenga aleatoriamente como lo hace?

Aquí está mi configuración:

<log4net debug="true"> 
<appender name="RollingLogFileAppender" 
     type="log4net.Appender.RollingFileAppender"> 

    <file value="..\Logs\\CurrentLog.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 

    <rollingStyle value="Date" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true" /> 

    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 

    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern 
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 

</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 

+1

En mi caso fue restableciendo el registro (re-configuración de ella, no por diseño ..) que causó este tipo de problemas - ver http://neilkilbride.blogspot.com.au /2008/04/configure-log4net-only-once.html – Jonno

+0

¿Le importaría agregar una respuesta o un comentario explicando qué causó su problema, si encontró una razón? –

+0

Sí, sería bueno saber qué causó su problema como dijo Mark. Por cierto, estaba teniendo el mismo problema y estableciendo ReconnectOnError en true bajo la configuración de ADONetAppender trabajada para mí. – Jportelas

Respuesta

56

Log4net se fail silently si algo va mal y no es capaz de escribir en sus appenders. Esto es realmente algo bueno, ya que significa que un poco de registro fallido no reducirá un sistema por lo demás sano, pero puede ser molesto cuando algo no se está registrando como se espera.

Su mejor opción es activar el propio internal logging de log4net para hacer algunos diagnósticos y (con suerte) averiguar por qué está fallando.

Así que en el archivo de configuración complemento de su aplicación:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

que se convertirá en la memoria interna de datos, que se envía a System.Diagnostics.Trace, lo que puede añadir:

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

para capturar a un archivo.

+1

¿Tiene un ejemplo más completo de dicho archivo de configuración? Probé numerosas variaciones y sigo recibiendo errores XML de XmlSerializationReader. Incluso una sola etiqueta '' vacía es la diferencia entre excepción y no. –

+0

Tengo el mismo problema, y ​​en mi caso parece ser que cada vez que abro un diálogo de archivo estándar, la DLL de superposición de icono [Box] (https://box.com) sobrescribe el proceso en curso log4net.config con el suyo –

+0

Esto NO es realmente bueno, ya que puede haber herramientas de supervisión del sistema y de notificación de errores, y si detiene el registro, no hay manera de que podamos saber si se produce una excepción.Odio esta horrible herramienta de registro, siempre es un dolor de cabeza, sea cual sea la compañía a la que vaya, cualquiera que sea la versión utilizada, siempre hay un dolor de cabeza. Crappy producto de Crappy desarrolladores .. – sotn

0

Envíe un mensaje de registro de prueba tan pronto como sea posible en el ciclo de vida de su aplicación, bastará con un simple LogManager.GetLogger("Init").Info("Starting logging"). Si algún otro código de referencia es el primero en iniciar el registro, una parte de su proceso de inicialización puede fallar (ya que carga la configuración de otro ensamblaje, que solo hace una vez).

leer aquí: https://logging.apache.org/log4net/release/faq.html#first-log

Cuestiones relacionadas