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私が現在行っている方法で検索することなく、作成した新しいトレース ソースに自動的に追加されることです。これは可能ですか?

4

1 に答える 1

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>

次に、既存の方法でコード内の TraceSource を構築し (そのトレース レベルはswitchValuein config によってオーバーライドされます)、それにリスナーを追加せず、通常どおりログに記録します。

于 2012-05-17T16:14:35.707 に答える