Log4Net RollingFileAppender avec un style de roulement composite est la superposition de données

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

Question

I ai un RollingFileAppender Log4Net qui est configuré comme suit:

<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 regardant le de , le style de roulement par défaut est composite , donc il est logique cela rouler quand il atteint une certaine taille (la valeur par défaut de 10 Mo), non seulement à la date.

Le problème est quand il frappe la taille, il redémarre le journal et je perds les données de la première moitié de la journée (il atteint cette taille vers midi).
Pourquoi ne serait-ce juste rouler à un nouveau fichier et toutes les futures lignes de journaux sont mis dans le MyLog.log? Ou est-ce le journal roule, mais à minuit, il roule à nouveau le journal et daté écrasant (par exemple. Rouler à MyLog.log2009-04-08 une fois qu'il atteint 10 Mo, et puis ce même écrasant fichier à minuit)?

Je tournerai la balise

<rollingStyle value="Date" />

Est-ce tout ce que je dois faire pour qu'elle roule uniquement sur la limite de date? Puis-je changer cela à la volée dans le Log4Net.config, ou dois-je redémarrer l'application? Il est en cours d'exécution sur IIS6.

Était-ce utile?

La solution

Voici mes paramètres. Il roule seulement à la date:

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

Les modifications apportées à votre web.config, redémarre automatiquement l'application (vous perdrez des sessions, etc.).

Autres conseils

Essayez d'ajouter le paramètre maxSizeRollBackups dans votre RollingFileAppender pour résoudre la moitié de notre problème. De cette façon, lorsque les rouleaux de fichier journal, il ne sera pas remplacer votre ancien journal, mais rouler dans un autre fichier.

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top