Log4Net RollingFileAppender con lo stile di laminazione composito è sovrascrittura dei dati

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

Domanda

Ho un RollingFileAppender Log4Net che si configura come:

<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>

, lo stile predefinito rotolamento è Composite , quindi ha senso questo rotolerà quando raggiunge una certa dimensione (il valore predefinito di 10 MB), non solo sulla data.

Il problema è quando si colpisce la dimensione, si sta riavviando il registro e sto perdendo i dati della prima metà della giornata (si raggiunge questa dimensione intorno a mezzogiorno).
Perché non sarebbe questo solo rotolare in un nuovo file e tutte le linee di log futuri sono messi nella MyLog.log? O è il registro è a rotazione, ma poi a mezzanotte, si sta rotolando di nuovo e overwritting il registro datato (ad es. A rotazione per MyLog.log2009-04-08 una volta che raggiunge 10 MB, e quindi overwritting questo stesso file a mezzanotte)?

io metterò la

<rollingStyle value="Date" />

Questo è tutto quello che devo fare per assicurarsi che rotola solo sul confine data? Posso cambiare questo al volo nel Log4Net.config, o devo riavviare l'applicazione? Si è in esecuzione su IIS6.

È stato utile?

Soluzione

Ecco le mie impostazioni. Si rotola solo sulla data:

<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>

Le modifiche al tuo web.config, si riavviare l'applicazione automaticamente (in modo perdi sessioni, ecc).

Altri suggerimenti

Prova ad aggiungere il parametro maxSizeRollBackups nel vostro RollingFileAppender per risolvere la metà del nostro problema. In questo modo, quando i rotoli del file di registro, non sarà sovrascrivere il vecchio registro, ma rotolerà in un altro file.

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top