2012-05-03 7 views
0

私は、ローリングログファイルに書き込むコンソールアプリケーションを持っています。問題は、アプリケーションが複数のプロセスによって呼び出され、同時に呼び出される可能性があることです。アプリケーションは1つのログファイルに書き込みます。複数のアプリケーションをサポートする.NETのロギングフレームワークで、同じローリングログファイルに書き込むことはできますか?

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

が、私は別のインスタンスが同じファイルへの書き込みしようとしている間に1つのインスタンスからのログメッセージは、ロールオーバー発生した場合に問題が発生する可能性があることを読んだ:私は現在MinimalLock設定でlog4netのを使用して調査しています。

この動作をサポートする別のフレームワーク、または適切な回避策がありますか?

答えて

1

<lockingModel type="log4net.Appender.FileAppender+InterProcessLock"

は今、あなたは情報をログに記録するロガー静的クラスを作成しますので、コードはスレッドセーフになり、次の試してください。

public static class Logger 
{ 
    private static readonly Object obj = new Object(); 

    private static ILog _appLog = null; 
    static Logger() 
    { 
     XmlConfigurator.Configure(); 
    } 

    public static void Log(string loggername) 
    { 
     lock (obj) 
     { 
      _appLog = LogManager.GetLogger(loggername); 
      _appLog.Error(....); 
     } 
    } 
} 
+0

FAQから:「RollingFileAppenderは、ファイルのローリング時にロックモデルを完全に無視します。ローリングファイルは、単にこのシナリオと互換性がありません。」 – ilitirit

関連する問題