Pergunta

Eu tenho um Log4Net RollingFileAppender que está configurado 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>

Olhando para o documentação , o padrão rolando estilo é Composite , por isso faz sentido este vai rolar quando se atinge um determinado tamanho (o padrão de 10MB), e não apenas na data.

O problema é quando ele atinge o tamanho, ele é reiniciar o log e eu estou perdendo os dados da primeira metade do dia (que atinge este tamanho em torno de meio-dia).
Por que não esta apenas rolar para um novo arquivo e todas as linhas de log futuros são colocados no MyLog.log? Ou é o log está rolando, mas, em seguida, à meia-noite, ele está rolando de novo e overwritting o log datado (eg. Rolando para MyLog.log2009-04-08 uma vez que atinge 10 MB, e depois overwritting este mesmo ficheiro à meia-noite)

I irá definir o

<rollingStyle value="Date" />

Isso é tudo que tenho que fazer para garantir que apenas rolos na fronteira Data? Posso mudar isso em tempo real no Log4Net.config, ou eu tenho que reiniciar o aplicativo? Ele está em execução no IIS6.

Foi útil?

Solução

Aqui está a minha configuração. Ele rola apenas na 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>

As alterações ao seu web.config, irá reiniciar o aplicativo automaticamente (assim você vai perder sessões, etc).

Outras dicas

Tente adicionar o parâmetro maxSizeRollBackups em sua RollingFileAppender para resolver metade do nosso problema. Desta forma, quando os rolos de arquivo de log, ele não vai substituir o seu log de idade, mas vai rolar-lo para outro arquivo.

<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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top