2

次の方法を使用してトレースレコードを追加しています。

TraceSource.TraceEvent(TraceEventType, Int32, String)

ここで、Int32はイベントIDを表します。

では、TraceSwitchでフィルタリングして、指定されたイベントIDのみでリッスンする方法はありますか?これは不可能ですか?

<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>
4

2 に答える 2

5

可能ですが、カスタムTraceFilterを作成し、 ShouldTraceメソッドをオーバーライドする必要があります。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>
于 2010-12-16T18:40:52.113 に答える
1

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

System.Diagnostics.TraceSourceオブジェクトを使用してコードをインストルメントします。

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

トークンシステムは、Ukadc.Diagnostics(または基本のTraceListenerクラスに基づいて作成したTraceListener)で提供される対応するTraceListenersでのみ使用できることに注意してください(私が知る限り)。

私はこのプロジェクトを本番環境で使用したことはありませんが、かなりだまされて、非常に感銘を受けました。それはうまく機能し、拡張が簡単です。

于 2010-12-16T20:27:41.317 に答える