2009-04-09 4 views
9

Ich habe eine Log4Net RollingFileAppender, die als konfiguriert ist:Log4Net RollingFileAppender mit Verbundroll Stil overwritting Daten

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

am documentation Sehen, die Der Standardroll Stil Verbund ist, so macht es Sinn diesen Willen Roll, wenn es eine bestimmte Größe erreicht (der Standardwert von 10 MB), nicht nur auf das Datum.

Das Problem ist, wenn es die Größe trifft, startet es das Protokoll neu und ich verliere die Daten von der ersten Hälfte des Tages (es erreicht diese Größe gegen Mittag).
Warum würde dies nicht einfach auf eine neue Datei übertragen und alle zukünftigen Protokollzeilen werden in MyLog.log abgelegt? Oder ist es das Protokoll rollt, aber dann um Mitternacht, es ist wieder rollen und überschreiben das datierte Protokoll (z. B. Rolling zu MyLog.log2009-04-08, sobald es 10 MB erreicht, und dann diese Datei um Mitternacht überschreiben)?

ich stelle die

<rollingStyle value="Date" /> 

Ist das alles, was ich zu tun haben, es nur, um sicherzustellen, auf dem Datum der Grenze rollt? Kann ich das im laufenden Betrieb in der Log4Net.config ändern, oder muss ich die Anwendung neu starten? Es läuft auf IIS6.

+0

Nur stellen Sie sicher, dass ich verstehe: Sie wollen Datum * und * Größe rollen? oder einfach date? –

+0

Ich will es nur auf das Datum rollen. In der Standardeinstellung wird das Rollen jedoch auf "Composite" gesetzt, sodass es auf dem Datum oder der Größe rollt, je nachdem, was zuerst eintritt. –

Antwort

10

Hier sind meine Einstellungen. Er rollt nur auf Datum:

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

Änderungen an Ihrem web.config, wird die Anwendung automatisch neu gestartet (so werden Sie Sitzungen verlieren, etc).

8

Versuchen Sie, den maxSizeRollBackups Parameter in Ihrem RollingFileAppender hinzuzufügen, um die Hälfte unseres Problems zu lösen. Auf diese Weise überschreibt die Protokolldatei das alte Protokoll nicht, sondern rollt es in eine andere Datei.

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