2009-04-09 7 views
9

私はlog4netのRollingFileAppenderを持ってoverwrittingさ:documentationを見てlog4netのRollingFileAppender複合ローリングスタイルでのように構成されたデータ

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

を、は、この意志理にかなっているデフォルトのローリングスタイルがコンポジットされているので、日付だけでなく、特定のサイズ(デフォルトは10MB)に達したときにロールバックします。

問題は、サイズがヒットしたときにログを再起動していて、前半のデータが失われている(正午前後にこのサイズに達する)ことです。
なぜこれは新しいファイルに転記されず、将来のすべてのログ行がMyLog.logに入れられますか? または、ログがローリングしていますが、深夜にもう一度ローリングして日付のログを上書きしています(たとえば、MyLog.log2009-04-08が10MBに達したら、この同じファイルを深夜に上書きする)。

私は

<rollingStyle value="Date" /> 

を設定しますが、これは私はそれが唯一の日付境界に転がることを確認しなければならないすべてですか?これをLog4Net.configで即座に変更することはできますか?それとも、アプリケーションを再起動する必要がありますか? IIS6で実行されています。

+0

私が理解していることを確認してください:あなたは日付*と*サイズをロールしたいですか?または単に日付? –

+0

私はちょうど日付にロールしたい。ただし、デフォルトでは、ローリングはコンポジットに設定されているため、日付またはサイズのいずれか早い方で回転します。 –

答えて

10

ここは私の設定です。

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

web.configに変更が加えられた場合、自動的にアプリケーションが再起動されます(セッションが失われるなど)。

8

RollingFileAppendermaxSizeRollBackupsパラメータを追加して、問題の半分を解決してください。このようにして、ログファイルが回転すると、古いログは上書きされませんが、別のファイルにロールバックされます。

<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> 
関連する問題