0

MyProcess.YYYYMMDD.log に記録したいバッチ プロセスがあります。通常は毎日実行されますが、障害やテストのために、1 日に複数回実行されることもあります。他の log4net の質問を見て、RollingLogFileAppender を使用して日付ベースのファイルを作成しています。ただし、同じ日に複数の実行が発生した場合、それらの複数の実行が同じファイルに記録されることになります。

理想的には、バッチ プロセスの最初の実行では MyProcess.YYYYMMDD.log にログを記録し、同じ日の 2 回目の実行では MyProcess.YYYYMMDD.2.log などにログを記録したいと考えています。

log4netでこれを達成する最も簡単な方法は何ですか?

重要な場合、現在のアペンダー構成は次のようになります。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="MyProcess.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value=".yyyyMMdd" />
  <staticLogFileName value="false"/>
  <PreserveLogFileNameExtension value="true"/>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>
4

2 に答える 2

1

2つのプロセスを同時に開始できないことが確実な場合は、プログラムでログファイルを設定できます。

たとえば、起動時にログを記録する前に、ログファイルの名前を設定します。

var logfileName = String.Format("{0}{1:yyyyMMdd}.log" , 
                 ".\logs\MyProcess" , DateTime.Now );

次に、ログファイルがすでに存在するかどうかを確認し、存在する場合は、一意の名前を取得するまでlogfileNameを変更します。

次に、のようにこの情報をlog4netに渡します。

log4net.GlobalContext.Properties["LogName"] = logfileName;

これは、最初のメッセージがログに記録される前に実行する必要があります。

このプロパティを使用するには、構成ファイルも変更する必要があります。

<file type="log4net.Util.PatternString" value="%property{LogName}" />
于 2012-07-11T19:27:50.210 に答える
1

ログの日付スタンプにインクリメントされた変数を追加できるかどうかわかりません。おそらくより良い方法は、ファイル名にタイムスタンプを追加して、この方法で区別できるようにすることです。

このリンクは、タイム スタンプを実装するために必要なプロパティを追加する方法を説明しています。分にログインしたくない場合は、代わりに現在の時間を使用することを選択できます。

于 2012-07-11T16:39:10.173 に答える