起きたこと
担当しているプロジェクトでLog4Netを使っていたのですが、そこで起きた現象になります。
ある日こんな問い合わせが来ました。
「ログが10MBを超えると消滅するんですけどこれどうなってるんです?」
ど、どうなってるんです?って、そんなこと起きるんです…?
調査してみたところ次のようになっていました。
原因
まあ当然、設定の問題でした。
必要な箇所だけ抜き出すとこんな感じの設定になっていました。
<appender name="defaultlog" type="RollingFileAppender">
<file value=".\Log" />
<appendToFile value="true" />
<param name="DatePattern" value='"_"yyyyMM".log"' />
<param name="RollingStyle" value="Composite" />
<param name="StaticLogFileName" value="false" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd,HH:mm:ss.fff},%level,%message%newline" />
</layout>
</appender>
はい。
RollingStyleがCompositeなのに足りないものがありますね。
MaxFileSizeとMaxSizeRollBackupsが設定されていませんね。
MaxFileSizeは指定しない場合、デフォルトで10MBとなります。
MaxSizeRollBackupsは指定しない場合、MaxFileSizeの容量を超えたときにバックアップを作成せず新規ログファイルで今までのログファイルを上書きします。
つまり10MB分のログが消滅します。
おそらくはデフォルトだと0になっているのだろうなと。
発生するのはRollingStyleがCompositeの場合、つまり日とファイルサイズでログの分割をしていた場合です。
今回はひと月分のログを同じファイルにため続ける設定になっていたので、半月分のログが消滅しました。
基本、この辺りは設定すると思うので、まあまず発生しない事柄だとは思いますが、皆様もお気を付けください…。
参考にしたドキュメント
https://logging.apache.org/log4net/log4net-1.2.13/release/sdk/log4net.Appender.RollingFileAppender.MaxFileSize.html
https://logging.apache.org/log4net/log4net-1.2.12/release/sdk/log4net.Appender.RollingFileAppender.MaxSizeRollBackups.html