Log4net detiene aleatoriamente el registro.


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

¿Por qué se detendría y comenzaría así? ¿Cómo debo correctamente configurar esto para que no se detendrá al azar 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>

 30
Author: Philipp M, 2010-02-15

4 answers

Log4Net fallará silenciosamente si algo sale mal y no puede escribir en sus anexores. En realidad, esto es algo bueno, ya que significa que un poco de registro fallido no derribará un sistema saludable, pero puede ser molesto cuando algo no está registrando como espera.

Su mejor apuesta es activar el propio log4net registro interno para hacer algunos diagnósticos y (con suerte) averiguar por qué está fallando.

Así que en el archivo de configuración de su aplicación añadir:

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

Que activará el registro interno, que se envía a System.Diagnostics.Trace, para que pueda agregar:

<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 esto en un archivo.

 56
Author: Alconja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 15:29:13

Envíe un mensaje de registro de prueba tan pronto como pueda en el ciclo de vida de su aplicación, basta con un simple LogManager.GetLogger("Init").Info("Starting logging"). Si algún otro código referenciado comienza primero el registro, una parte del proceso de inicialización puede fallar (ya que carga la configuración de otro ensamblado, lo que solo hace una vez).

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

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-09 00:53:43

Compruebe también si log4net todavía está configurado en el AssemblyInfo.archivo CS. En mi caso, un check-in causó que se eliminara la siguiente línea en este archivo:

[asamblea: log4net.Config.XmlConfigurator (Watch = true)]

Que a su vez causó que log4net dejara de registrar...

 0
Author: Sego,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-05 19:54:45

Después de luchar con Log4Net durante un tiempo, descubrí que dejaría de registrar por completo. No importaba lo que intentara, no podía volver a trabajar. Parece que hay problemas cuando no inicializa el registro en las primeras líneas de código, pero esa indicación borrosa no fue suficiente para que el registro funcione de manera confiable dentro de una dll cargada por otro programa y así sucesivamente.

Tampoco logré activar el registro interno.

Finalmente resolví crear un dll dedicado que mis programas pueden llamar para crear de forma fiable un registro utilizando Log4Net. El dll solo hace eso y el código que crea el registro está aislado y nunca cambia. Asumo que de esta manera voy a ser capaz de crear archivos de registro de forma fiable y escribir en ellos. Hasta ahora, este enfoque ha solucionado los problemas con el registro en el que había pasado innumerables horas frustrantes.

He publicado el código en este hilo ASÍ:

Stackoverflow.com/questions/308436/log4net-programmatically-specify-multiple-loggers-with-multiple-file-appenders

 0
Author: pasx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-04 09:30:25