2011-12-05 10 views
0

私はnLog 2.0を使用していますし、this interesting read後、私のようなシンプルなレイアウトに条件を適用しようとしました:nLog条件付きレイアウト

layout="${message:when=logger==A}" 
layout="${message:when=logger=='A'}" 
layout="${message:when='logger==A'}" 

だけでなく、これらのどれもが任意の効果を持っていないん、彼らはまた、スローされません。エラーには条件が黙っ(throwExceptionsがtrueに設定されている)

  1. どのように動作するようにレイアウトを条件付きにするどこかに飲み込まれているようですので、?彼らも働いていますか?
  2. 何かが間違っている/認識されていない場合、nLogは例外をスローできますか?

これは完全なコードです。これは基本的なコンソールアプリケーションです。

main.cs:(実行ディレクトリにある)

class Program 
{ 
    static void Main(string[] args) 
    { 
    NLog.LogManager.GetLogger("A").Info("from A"); 
    NLog.LogManager.GetLogger("B").Info("from B"); 
    } 
} 

NLog.config:

<?xml version="1.0" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     throwExceptions="true"> 

    <targets> 
    <target name="main" xsi:type="File" fileName="my.log" 
      deleteOldFileOnStartup="true" keepFileOpen="true" 
      layout="${callsite} ${message:when=logger=='A'}"/> 
    </targets> 

    <rules> 
    <logger name="*" minlevel="Trace" writeTo="main" /> 
    </rules> 
</nlog> 

出力:

ConsoleApplication1.Program.Main from A -> this should only log ${callsite} 
ConsoleApplication1.Program.Main from B 
+0

完全なnlog設定を表示できますか? – kolbasov

+0

@justipsが更新されました! – stijn

答えて

1

ありがとう!ロガー名を設定しようとしてください:

<logger name="A" minlevel="Trace" writeTo="main" /> 
<logger name="B" minlevel="Trace" writeTo="main" /> 

ここでは2つのロガーがあり、コードで利用できます。

+0

これは望ましい効果がありません.A以外のすべてのロガーからのメッセージはログに記録されませんが、他のすべてのロガーは単純に拒否されます。これをもっと明確にするために質問を更新しました。 – stijn

+0

GetLogger( "A")を使用するときにnlogの設定を正しく理解したら、として設定する必要があります。したがって、両方のロガーの設定を追加する必要があります。更新された回答をご覧ください。 – kolbasov

+0

が該当しない場合は、ワイルドカードを使用してロガーを選択できます。 http://nlog-project.org/wiki/Configuration_file#Rules – stijn