2012-03-15 6 views
2

NLogを使用してシステム内のいくつかのログを記録しようとしています。これは非常に複雑なシステムで、異なる場所にあるメッセージキューを持つマルチスレッドです。NLog - NTPの拡張 - callsite - dispose()

NLogを拡張して、必要なアイテムをログに記録する必要がありました。 NLogを拡張した後、コールサイト情報が間違っていたことがわかりました。 Stackで検索すると、私に解決策が与えられました。 今私の懸念は、(TypeNameを渡すことで)数百のログインスタンスを持つ可能性があるため、これが本当に速くバックアップされるという悪い考えがあります。

NLogのdisposeメソッドが表示されないため、ガベージコレクションがこれをどのように受け取るのか分かりません。

それぞれが100スレッドを処理する異なるスレッドで実行されているクラスが100個あり、それぞれがログを記録していて新しいログインスタンスを作成している場合、私は将来問題が発生します。

私は提案があります。これが問題になるのかどうか教えてください。もしそうなら、解決策はありますか?

編集:コードを追加: - ここにExtenderClass(クラス名を取ります)

private readonly Logger _logger; 

     public NLogLogger(Type t) 
     { 
      _logger = LogManager.GetLogger(t.FullName); 
     } 
     public void Trace(string message, string systemUserID, string transactionID, string description) 
     { 
      if (_logger.IsTraceEnabled) 
       { 
        Write(LogLevel.Trace, message, systemUserID, transactionID, description); 
       } 
     } 

ここではそれを使用するクラスです: - このクラスは、各スレッドのタスクのためにインスタンス化されますので、多分500に忙しい日。

public class MyClass 
{ 
    private static readonly Logger logger = LogManager.GetCurrentClassLogger(); 

    public void DoSomething() 
    { 
    logger.Debug("Hello from inside DoSomething"); 
    } 
} 

この方法では、唯一のロガーがあります:

public class ThreadTask : TaskBase 
    { 
     private readonly NLogLogger _logger = new NLogLogger(typeof(ThreadTask));  
     public Method(string val) 
      { 
       _logger.Trace(message); 
      } 
    } 

答えて

0

NLog(およびそのことについてはlog4netのと)を使用してロガーのインスタンスを作成するための典型的なパターンは、各クラスでこのような何かを行うことですクラスごとにインスタンス化されたインスタンス(上記のようにロガーが作成されます)。したがって、たくさんのクラスインスタンスが作成されるため、単純に作成されるロガーの数が多すぎるという問題はありません。また、典型的なパターンは静的なロガーインスタンスを使用するため、ロガーはアプリケーション(またはAppDomain)の存続期間中も有効なので、Disposeは必要ありません。

+0

はい、正しいです。しかし、私はnLogを拡張しているので、私は基本クラスを持っています。コール・サイトが正しいように型を基本クラスに渡す必要があります。 – bugnuker

+1

あなたは何の問題があるのか​​分かりません。なぜ数百のログインスタンスがあるのですか?上記のようなロガーを宣言することで(ロガーをサブクラス化したことを考慮に入れて)、アプリケーション内でクラスごとに1つのロガーインスタンスを用意する必要があります。したがって、1つのクラス(静的メンバーとしてロガーを持つ)があり、クラスのインスタンスを100個作成すると、ロガーのインスタンスは1つだけになります。クラス内でロガーを宣言して作成する方法を示すコードを投稿できますか? – wageoghe

+0

オリジナルの質問にコードを追加しました – bugnuker