2010-12-16 15 views
2

私は、トレース・レコードを追加するために、次の方法を使用しています:のInt32は、イベントIDを表しイベントIDで聞こえるトレースをフィルタリングする方法は?

TraceSource.TraceEvent(TraceEventType, Int32, String) 

どのように指定されたイベントIDだけを聞くためにTraceSwitchをフィルタリングするのですか? Irこれは不可能ですか?

<system.diagnostics> 
    <sources> 
     <source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch>" 
      <listeners> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" /> 
      </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="sourceSwitch" value="?" /> 
    </switches> 
</system.diagnostics> 

答えて

5

それは可能ですが、あなたはカスタムTraceFilterを書き、ShouldTraceメソッドをオーバーライドする必要があります。 idはそのIDに渡されますが、すぐに使用できるフィルタはサポートされていません。

その後、あなたは.configファイルでこのようにそれを宣言することができます。

<source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> 
    <listeners> 
    <add name="console" type="System.Diagnostics.ConsoleTraceListener"> 
     <filter type="YourNamespace.YourFilter, YourAssembly, ..." /> 
    </add> 
    </listeners> 
</source> 
1

あなたがUkadc.Diagnostics from codeplexを試すことができます。このプロジェクトは、System.Diagnosticsのいくつかの便利な拡張機能を提供します。彼らが提供する最もクールなものは、log4netとNLogで達成できるものと同様のログ/トレース出力形式を定義するために使用できるトークンベースのシステムです。これは構成のみの依存関係です。つまり、コードですでにTraceSourcesを使用している場合は、Ukadc.Diagnosticsをマシンに配置し、app.configがTraceListeners、PropertyTokensなどを指すようにしてください。

System.Diagnostics .TraceSourceオブジェクト。

Ukadc.Diagnosticsを使用すると、ほとんどのプロパティトークン(EventIdを含む)に基づいてフィルタリングできます。

Ukadc.Diagnosticsで提供されている対応するTraceListeners(または基本のTraceListenerクラスに基づいて記述したTraceListener)でトークンシステムを(わかっている限り)使用することができます。

私はプロダクションでこのプロジェクトを使用していませんが、私はそれをかなり気にしており、かなり感銘を受けました。それはうまく動作し、拡張が容易です。

関連する問題