2009-04-09 4 views
9

Mam log4net RollingFileAppender który jest skonfigurowany jako:log4net RollingFileAppender z kompozytowych stylu toczenia jest overwritting dane

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

patrząc na documentation The Styl domyślny walcowanie Composite, więc ma to sens, to będzie przechodzić, gdy osiągnie określony rozmiar (domyślnie 10 MB), a nie tylko datę.

Problem polega na tym, że osiąga rozmiar, restartuje log i tracę dane z pierwszej połowy dnia (osiąga ten rozmiar około południa).
Dlaczego po prostu nie zostanie przeniesiony do nowego pliku i wszystkie przyszłe linie dziennika zostaną umieszczone w MyLog.log? A może dziennik się toczy, ale później o północy toczy się ponownie i nadpisuje datowany dziennik (np. Przesuwa się do MyLog.log2009-04-08 po osiągnięciu 10 MB, a następnie nadpisuje ten sam plik o północy)?

będę ustawić

<rollingStyle value="Date" /> 

Czy to wszystko, co mam zrobić, aby upewnić się, że rzuca tylko w dniu granicy? Czy mogę zmienić to w locie w Log4Net.config, czy muszę ponownie uruchomić aplikację? Działa na IIS6.

+0

Upewniam się, że rozumiem: chcesz przetasować datę * i * rozmiar? lub tylko datę? –

+0

Chcę, żeby to się stało tylko w dniu. Domyślnie walcowanie jest ustawione jako złożone, więc jest zwijane według daty lub rozmiaru, w zależności od tego, co nastąpi wcześniej. –

Odpowiedz

10

Oto moje ustawienia. To rzuca tylko w dniu:

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

Zmiany w Twojej web.config, będzie ponownie uruchomić aplikację automatycznie (tak stracisz sesje, etc).

8

Spróbuj dodać parametr maxSizeRollBackups do swojego RollingFileAppender, aby rozwiązać połowę naszego problemu. W ten sposób, gdy plik dziennika zostanie przeniesiony, nie zastąpi starego logu, ale przeniesie go do innego pliku.

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