Как отфильтровать трассировку прослушиваемого по идентификатору события?

Я использую следующий метод, чтобы добавить запись трассировки:

TraceSource.TraceEvent(TraceEventType, Int32, String)

где Int32 представляет идентификатор события.

Так как же фильтровать в TraceSwitch для прослушивания только по указанному идентификатору события? И это невозможно?

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

2 ответа

Решение

Это возможно, но вам нужно написать собственный TraceFilter и переопределить метод ShouldTrace. Идентификатор передается на него, но никакой готовый фильтр не поддерживает его.

Затем вы можете объявить это следующим образом в файле.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>

Вы можете попробовать http://ukadcdiagnostics.codeplex.com/. Этот проект предоставляет несколько полезных расширений для System.Diagnostics. На мой взгляд, самая крутая вещь, которую они предоставляют, - это система на основе токенов, которую можно использовать для определения формата вывода журнала / трассировки, аналогичного тому, что вы можете достичь с помощью log4net и NLog. Это зависимость только от конфигурации. То есть, если ваш код уже использует TraceSources, вам нужно только установить Ukadc.Diagnostics на ваш компьютер и указать в файле app.config их TraceListeners, PropertyTokens и т. Д.

Вы по-прежнему обрабатываете свой код, используя объекты System.Diagnostics.TraceSource.

На ваш взгляд, используя Ukadc.Diagnostics, вы можете фильтровать по большинству токенов свойств (включая EventId).

Обратите внимание, что систему токенов можно использовать (насколько мне известно) только с соответствующими TraceListeners, предоставленными в Ukadc.Diagnostics (или любым TraceListener, который вы пишете на основе их базового класса TraceListener).

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

Другие вопросы по тегам