2012-05-02 7 views
1

Microsoftトレースを使用するように一部のコードを変換しています。私が望むのは、1つのプロジェクトにすべてのリスナーを定義し、他のアセンブリから明示的にロードすることなく、それらを使用することです。明確にするためにすべての新しいトレースソースへのトレースリスナーの自動ロード

、これは私が今やっていることです:

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
    <system.diagnostics> 
     <trace autoflush="true"> 
     <listeners> 
      <add name="myListener" type="ConsoleApplication4.LogListener, ConsoleApplication4"/> 
      <remove name="Default" /> 
     </listeners> 
     </trace> 
    </system.diagnostics> 
    </configuration> 

とC#コードでは:私が望む何

var b = Trace.Listeners; 
TraceSource tr = new TraceSource("Blah", SourceLevels.All); 
tr.Listeners.Add(b["myListener"]); 
tr.TraceEvent(TraceEventType.Warning, 5, "Hello"); 

は、自動的に新しいに追加するmyListenerためでありますトレースソース私は今やっているようにそれを見ることなく作成します。これは可能ですか?

答えて

1

configにそのリスナーと一緒にトレースソースを定義します。

<system.diagnostics> 
    <sources> 
    <source name="Blah" switchValue="Warning"> 
     <listeners> 
     <add name="myListener" /> 
     </listeners> 
    </source> 
    </sources> 
    <!-- Note these are in sharedListeners rather than trace --> 
    <sharedListeners> 
    <add name="myListener" ... /> 
    </sharedListeners> 
    <!-- Autoflush still works as expected --> 
    <trace autoflush="true" /> 
</system.diagnostics> 

その後(そのトレースレベルを設定してswitchValueによって上書きされます)コードにすでにある方法をTraceSourceのを構築し、ドン」 tこれにリスナーを追加し、通常どおりにログに記録します。

関連する問題