イベントIDによってリッスンされたトレースをフィルタリングする方法? -- c# フィールド と trace フィールド と tracelistener フィールド と traceswitch フィールド と tracesource フィールド 関連 問題

How to filter trace listened by event id?












2
vote

問題

日本語

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

<事前> <コード> TraceSource.TraceEvent(TraceEventType, Int32, String)

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

それでは、TraceSwitchでフィルタする方法指定されたイベントIDによってのみ待機しますか? 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>
英語

I'm using next method to add a trace record:

TraceSource.TraceEvent(TraceEventType, Int32, String) 

where Int32 represents event id.

So how to filter in TraceSwitch to listen only by specified event id? Ir this is impossible?

<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> 
</div
              

回答リスト

5
 
vote
vote
ベストアンサー
 

可能ですが、カスタム tracefilter と extrace メソッドをオーバーライドします。 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>   
 

It's possible but you need to write a custom TraceFilter and override the ShouldTrace method. The id is passed to it, but no out-of-the-box filter supports it.

Then, you can declare it like this in a .config file:

<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> 
</div
 
 
1
 
vote

CodePlex から UKADC.Diagnosticsを試すことができます。このプロジェクトでは、System.Diagnosticsに便利な拡張機能がいくつかあります。私の意見では、彼らが提供する最もクールなことは、log4netとnlogで達成できるものと同様のログ/トレース出力フォーマットを定義するために使用できるトークンベースのシステムです。構成のみの依存関係です。つまり、コードがすでにTracesourceを使用している場合は、UKADC.DIAGNOSTICSをマシンに入れるだけで、app.configがあります。

System.Diagnostics.TraceSourceオブジェクトを使用してコードを計装します。

あなたのポイントに、umadc.diagnosticsを使用して、ほとんどのプロパティトークン(EventIDを含む)に基づいてフィルタリングできます。

トークンシステムは、UKADC.DIAGNOSTICS(またはベースTraceListenerクラスに基づいて書いたTraceListener)で提供されている対応するTraceListenersを使用して(または私が知っている)使用できます。

私はこのプロジェクトを生産に使用していませんが、私はそれをかなり少しずつだったところに騙されています。それはうまく機能し、拡張が簡単です。

 

You can try Ukadc.Diagnostics from codeplex. This project provides some useful extensions for System.Diagnostics. The coolest thing, in my opinion, that they provide is a token based system that can be used to define log/trace output format similar to what you can achieve with log4net and NLog. It is a configuration-only dependency. That is, if you code is already using TraceSources, you only have to put Ukadc.Diagnostics on your machine and have your app.config point to their TraceListeners, PropertyTokens, etc.

You still instrument your code using System.Diagnostics.TraceSource objects.

To your point, using Ukadc.Diagnostics you can filter based on most property tokens (including EventId).

Note that the token system can only be used (as far as I know) with the corresponding TraceListeners provided in Ukadc.Diagnostics (or any TraceListener that you write based on their base TraceListener class).

I have not used this project in production, but I have fooled around with it quite a bit and have been quite impressed. It works well and is easy to extend.

</div
 
 

関連する質問

1  コードからTraceSourceを見つける  ( Finding a tracesource from code ) 
単一の管理プロジェクトによって管理されている複数のプロジェクトを含む大規模なビジネスアプリケーションを持っています。 この管理プロジェクト内では、特定の軌跡のスイッチ値をリモートに調整し、DebugViewを使用してプロジェクトで何が起こっているのかを確認した...

1  System.Diagnosticsのクラスベースのトレースソース  ( Class based trace sources for system diagnostics ) 
現在、 log4net から System.Diagnostics 名前空間に System.Diagnostics ネームスペースとして移行しています).Netの組み込みフレームワークとB)アクティビティトレースのような強力な機能を使用してください。 LO...

20  System.Diagnostics.Tracesourceのトレース出力のフォーマット  ( Format of tracing output in system diagnostics tracesource ) 
次のコード: <事前> <コード> static void Main(string[] args) { TraceSource ts = new TraceSource("MyApplication"); ts.Switch = new So...

3  TraceSourceとASP.NET:Webサイトではなく、Webアプリケーションのために機能します  ( Tracesource and asp net works for web applications not websites ) 
ASP.NETウェブサイトにトレース機能を追加しているので、 traceSource 。 WebアプリケーションプロジェクトとWebサイトプロジェクト。 各プロジェクトに同様のweb.configを使用して、Windowsイベントログにトレースをログに記録し...

3  TraceSource:カスタムTraceListenerが働いていません  ( Tracesource custom tracelistener not working ) 
TraceSourceを使用してASP.NETアプリケーションを記録します。 出力形式を変更するには、TextWriterListenerの代わりに独自のTraceListenerを作成する必要があります。 <事前> <コード> <trace> ...

2  マルチスレッド環境でのTraceSourceのを使用して  ( Using tracesource in multithreaded environment ) 
私はasyncronous-ワークフローを使用してF#でアプリケーションを書かれています。 今、私がやりたいものをそれにいくつかのトレースを追加することです! を数回インスタンス化することができ、クラスAは基本的にあります。インスタンスのそれぞれは、(それ自体...

2  app.configで複数のTraceSourceフィルタを組み合わせます  ( Combine multiple tracesource filters in app config ) 
私のアプリケーションにFileTraceListenersを設定し、「冗長」レベルのメッセージを無視しますが、「情報」のレベル以上のログと「START」と「STOP」のイベントを記録します。 すべてがapp.configファイル内に設定されています。 ただし、...

5  TextWriterTraceListenerがapp.configを使用しないようにするのをどのように停止しますか?  ( How do you stop a textwritertracelistener from appending using app config ) 
ロギングのためにsystem.diagnostics.traceSourceを使用していて、私のリスナーの1つはTextWriterTraceListenerです。トレースプライマーこここれを設定します以下のように: <事前> <コード> <listeners...

2  イベントIDによってリッスンされたトレースをフィルタリングする方法?  ( How to filter trace listened by event id ) 
トレースレコードを追加するには次の方法を使用しています。 <事前> <コード> TraceSource.TraceEvent(TraceEventType, Int32, String) ここで、INT32はイベントIDを表します。 それでは、TraceS...

3  同じログファイルに書き込む同じアプリケーションの2つのインスタンス  ( Write to same log file two instances of the same application ) 
同じアプリケーションの2つのインスタンスから同じファイルへの書き込み方法。 WRITE I System.DiagnostisネームスペースのTraceEventメソッドを使用してTraceSourceクラスを使用しました。私は書き込みのためにミューテックスを...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有