Автоматически загружать прослушиватель трассировки для всех новых источников трассировки

Я преобразовываю некоторый код для использования трассировки Microsoft. Я хотел бы определить всех слушателей в одном проекте, а затем использовать их из других сборок, не загружая их туда явно.

Чтобы уточнить, вот что я делаю сейчас:

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

И в коде С#:

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

Я бы хотел, чтобы myListener автоматически добавлялось в любой новый источник трассировки, который я создаю, без необходимости искать его так, как я это делаю сейчас. Это возможно?


person user472875    schedule 02.05.2012    source источник


Ответы (1)


Определите источник трассировки вместе с его слушателями в конфигурации:

<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 в коде так, как вы уже это сделали (его уровень трассировки будет переопределен switchValue в конфигурации), не добавляйте к нему никаких слушателей и регистрируйтесь в нем как обычно.

person anton.burger    schedule 17.05.2012