0

log4netはスレッドセーフですが、プロセスセーフではないことを私は知っているので、Log4NetはWebアプリケーションにとって安全です。このシナリオでは、単一のファイルを使用してログを書き込むことはできません。他に解決策はありますか?

4

1 に答える 1

0

ファイルアペンダーを利用していると仮定すると、DEFAULT の動作がプロセスセーフではないことは事実です。ただし、他に 2 つのオプションがあります。

Log4Net doco から:

FileAppender は、LockingModel プロパティを介してプラグ可能なファイル ロック モデルをサポートします。FileAppender.ExclusiveLock によって実装されるデフォルトの動作は、このアペンダーが閉じられるまでファイルの排他的書き込みロックを取得することです。代替モデルは、アペンダーがロギング イベント (FileAppender.MinimalLock) を書き込んでいる間のみ書き込みロックを保持するか、名前付きのシステム全体のミューテックス (FileAppender.InterProcessLock) を使用して同期します。

構成行は次のようになります。

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

排他的が最もパフォーマンスが高いと思います。

これを尋ねていませんが、構成で次の構文を使用してプログラムでファイル/パスを設定できます。

<file type="log4net.Util.PatternString" value="%property{LogName}" />

次に、セットアップで LogName vi C# を次のように設定します。

log4net.GlobalContext.Properties["LogName"] = fullPathToLogfile + afileName ; 
var configInfo = new FileInfo("configfilename.config");    
log4net.Config.XmlConfigurator.Configure(configInfo);
于 2012-10-31T00:45:34.277 に答える