2016-06-15 5 views
2

NLogがターゲットに送信する前に、いくつかのオブジェクトをシリアル化する必要があります。私はカスタムターゲットを書くことができますが、それから可能なログターゲットごとにカスタムターゲットを記述する必要があります。NLogがターゲットに送信する前にデータを準備しますか?

私が知る必要があるのは、NLogが(レベルに基づいて)メッセージをどのターゲットにも記録し、そうであればデータをシリアル化することです。ログデータにNLogの設定に従ってログに記録されないレベルが記述されている場合は、時間がかかるためオブジェクトのシリアライズを避ける必要があります。

NLogがターゲットに送信する前にデータを準備する方法はありますか、カスタムターゲットクラスでこれを解決する必要がありますか?

答えて

0

Loggerを取得し、IsXXXEnabledプロパティを確認できます。例えば

class MyExpensiveClass 
{ 
    public void string Serialize() 
    { 
     return SomethingExpensive; 
    } 
} 

class ThisNeedsLogging 
{ 
    private static Logger logger = LogManager.GetCurrentClassLogger(); 

    private MyExpensiveClass expensive = new MyExpensiveClass(); 

    public void TraceSomething() 
    { 
     if (logger.IsDebugEnabled) 
      logger.Debug(expensive.Serialize()); 
    } 
} 
+0

これは素晴らしいですね!したがって、NLog.configのロガーのいずれかがDebugまたはTraceに設定されている場合、IsDebugEnabledはtrueを返しますか?たとえば、 Banshee

+0

正しいです! Loggerを 'Trace'に設定し、' IsDebugEnabled'をチェックすると、 'true'が返されます。 'Info'に設定すると' false'になります。 [LogLevel](http://nlog-project.org/documentation/v4.3.0/html/T_NLog_LogLevel.htm)を参照してください。 – iggymoran

+0

@Banshee、それはあなたのために働いたのですか? – iggymoran

関連する問題