web-dev-qa-db-ja.com

Log4Netはログファイルを自動的に削除できますか?

C#で記述されたWindowsサービスプログラムでlog4netRollingFileAppenderを使用しています。ログディレクトリ内のファイルの数とサイズが急速に増加しているため、クリーンアップが必要です。構成は次のとおりです。

<appender name="Rolling Log" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\MyProgram.%cs{instanceName}.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value=".yyyy-MM-dd.lo\g" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="150MB" />
<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%-5level] %property{remoteUser} [%threadIdentity] %type{1}.%method - %message%newline%exception" />
</layout>

30日間のログのみを保持したい。ログを自動的に削除するようにlog4netを構成するにはどうすればよいですか? log4netで利用できない場合、どのような解決策がありますか?

前もって感謝します。

19
tonyjy

ここから別の質問がありますSO本質的に同じことを尋ねます: Log4Net:RollingFileAppenderに最大バックアップファイルをローリング日付で設定します

コンセンサスは、log4netがそれを直接サポートしていないというものでした。あるポスターによると、log4netのソースコードリポジトリに実装されていますが、まだリリースされていません。別のポスターは、彼が古いファイルを定期的にクリーンアップするために使用するコードを示しています。

9
wageoghe

確認はできませんが、既存のアペンダーではできないと確信しています。

ただし、次の2つのオプションがあります。

  1. RollingFileAppenderをサブクラス化して、独自のアペンダーを作成します(または、より詳細な制御が必要な場合は、FileAppenderをサブクラス化します)。次に、そのアペンダーを使用するように構成ファイルを変更します(アペンダー要素を変更します)。
  2. X日より古いファイルを削除する.batファイルを作成します( N日より古いファイルを削除するためのバッチファイル を参照)。次に、このbatファイルを実行するタスクをWindowsで作成します( http://support.Microsoft.com/kb/308569 )。毎日。
4
steinar