ドキュメント:
このアペンダーは、ActivateOptions が呼び出されると、最初に書き込み用にファイルを開こうとします。これは通常、構成中に行われます。ファイルを書き込み用に開くことができない場合、メッセージがアペンダーに記録されるたびに、アペンダーはファイルを再度開こうとします。メッセージがログに記録されたときに書き込み用にファイルを開くことができない場合、メッセージはこのアペンダーによって破棄されます。
つまり、ログを記録しようとするたびに余分なオーバーヘッドが発生しないように、できるだけ早くファイルを開こうとします。それが失敗すると、何かを記録しようとするたびにファイルを開こうとします。
特定のインスタンスでログがどのように動作するかを簡単に確認できます。ファイルが開かれるたびにレイアウトのヘッダー値がファイルに書き込まれ、ファイルが閉じられるたびにレイアウトのフッター値が書き込まれます。
ただし、これがデフォルトの動作であることに注意してください。FileAppender
は、FileAppender.ExclusiveLock
デフォルトでロック モデルを使用します。もう 1 つのオプションは、FileAppender.MinimalLock
各ログ操作の前にロックを取得し、後で解放しようとするロック モデルです。アペンダーを使用するには、次のように構成できます。
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="${TMP}\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
ロギング操作ごとにロックを取得することは、デフォルトの「1 回取得して 1 回解放する」モデルよりも明らかに時間がかかります。ただし、これには正当な理由があります。たとえば、長時間実行されるアプリケーションの実行中にログファイルをローテーションする必要がある場合などです。