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

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

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 ]

5 голосов
/ 16 декабря 2010

Возможно, но вам нужно написать пользовательский 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>
1 голос
/ 16 декабря 2010

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

Вы по-прежнему обрабатываете свой код с помощью System.Diagnostics.TraceSource objects.

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

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

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

...