Можно ли отключить трассировку для отдельной сборки, на которую ссылается мой код?

У меня есть определенные рамки кода, и у меня есть TraceListener, определенный по двум причинам:

  • Обратная совместимость со многими старыми журналами, которые были сделаны через Trace.Write до тех пор, пока мы не обновим их, и
  • Приятно иметь возможность обрабатывать другие сборки нашими ссылками на код, если это необходимо.

Тем не менее, у меня есть одна сборка (не наша), которая регистрирует множество бессмысленных данных, которые не помогают нам ничего отлаживать. Как я могу отключить трассировку для этой единственной сборки (или, альтернативно, проекта фасада, который мы построили вокруг него), оставив его включенным для остальной части приложения?

Я пробовал разные варианты конфигурации в нашем проекте фасада, обычно это выглядело следующим образом, но безрезультатно. Я пытался добавить <remove> элементы, которые соответствуют <add> элементы которые настраивают логирование в первую очередь, пробовали <clear>их настройки <trace enabled="false"> и как минимум три другие попытки. Спасибо за любую помощь, вы можете предоставить!

<system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <clear/>
      </listeners>
    </trace>
    <switches>
    </switches>
  </system.diagnostics>

2 ответа

Вы можете написать свой собственный фильтр трассировки для использования с вашим TraceListener. Внутри этого фильтра вы можете найти свою сборку в stackTrace и отключить трассировку событий.

В моем случае я написал фильтр (см.: DotNetOpenAuthFilter) на основе EventTypeFilter, который фильтрует события только из библиотеки DotNetOpenAuth.

Затем подключите фильтр к слушателю в файле web.config:

<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add name="console" type="System.Diagnostics.ConsoleTraceListener" >
          <filter type="Common.Log.DotNetOpenAuthFilter, Common" initializeData="Warning" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Используйте TraceSource.

  1. Инициализируйте его в вашем источнике трассировки.

    TraceSource logger = new TraceSource("Class1");

  2. Назовите это из критических точек в коде:

    logger.TraceInformation("Hello from Class1");

  3. Обязательно отредактируйте конфигурацию вашего приложения:

<system.diagnostics> <trace autoflush="true"/> <sources> <source name="Class1" switchName="Class1Switch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="console"></add> <add name="csv" /> <!-- or you can add your own listener here --> </listeners> </source> </sources> <switches>
<add name="Class1Switch" value="Information" />
</switches> <sharedListeners> <add name="console" type="System.Diagnostics.ConsoleTraceListener" /> <add name="csv" type="System.Diagnostics.DelimitedListTraceListener" delimiter="|" initializeData="d:\data\tracing\trace.log" traceOutputOptions="Timestamp, ThreadId, LogicalOperationStack, DateTime, ProcessId"> </add> </sharedListeners> </system.diagnostics>

Если, скажем, вы хотите регистрировать только ошибки, измените переключатель:

<add name="Class1Switch" value="Error" />

Чтобы полностью отключить его:

<add name="Class1Switch" value="Off" />
Другие вопросы по тегам