Log4net RollingFileAppender con el estilo de rodadura compuesta es la sobreescritura de datos

StackOverflow https://stackoverflow.com/questions/734963

Pregunta

Tengo un RollingFileAppender Log4net que se configura como:

<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>

    <root>
      <level value="ALL" />
    </root>

    <logger name="RollingFileAppender" additivity="false">
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender" />
    </logger>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="C:\\MyLog.log" />
      <param name="AppendToFile" value="true" />
      <param name="DatePattern" value="yyyy-MM-dd"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
      </layout>
    </appender>

  </log4net>

</configuration>

En cuanto a la , el estilo por defecto la rodadura es Composite , así que tiene sentido esta rodará cuando alcanza un cierto tamaño (el valor por defecto de 10 MB), no sólo en la fecha.

El problema es cuando se golpea el tamaño, se está reiniciando el registro y estoy perdiendo los datos de la primera mitad del día (que alcanza este tamaño alrededor del mediodía).
¿Por qué no sería esto acaba de rodar a un nuevo archivo y todas las futuras líneas de registro se colocan en el MyLog.log? ¿O es el registro está rodando, pero luego a la medianoche, que está rodando una y otra overwritting el registro de fecha (por ejemplo. Rodando a MyLog.log2009-04-08 una vez que alcanza 10 MB, y luego overwritting este mismo archivo a la medianoche)

Voy a configurar

<rollingStyle value="Date" />

Es esto todo lo que tengo que hacer para garantizar que sólo rueda sobre el límite Fecha? ¿Puedo cambiar esta situación sobre la marcha en el log4net.config, o tengo que reiniciar la aplicación? Se ejecuta en IIS 6.

¿Fue útil?

Solución

Aquí está mi configuración. Se enrolla sólo en fecha:

<log4net>
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="c:\Logs\Today.log"/>
        <rollingStyle value="Date"/>
        <datePattern value="yyyyMMdd"/>
        <appendToFile value="true"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level %logger %date{ISO8601} - %message%newline"/>
        </layout>
    </appender>
    <root>
        <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". -->
        <level value="ERROR"/>
        <appender-ref ref="RollingFile"/>
    </root>
</log4net>

Los cambios en su web.config, se reiniciará la aplicación automáticamente (por lo que no se pierden las sesiones, etc.).

Otros consejos

Trate de añadir el parámetro maxSizeRollBackups en su RollingFileAppender para resolver la mitad de nuestro problema. De esta manera, cuando los rollos de archivo de registro, no va a sobrescribir el registro antiguo, pero rodará en otro archivo.

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
  <param name="File" value="C:\\MyLog.log" />
  <param name="AppendToFile" value="true" />
  <param name="DatePattern" value="yyyy-MM-dd"/>
  <param name="maxSizeRollBackups" value="10" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%m%n"/>
  </layout>
</appender>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top