Разделить TraceSource на несколько уровней TraceListeners - PullRequest
3 голосов
/ 04 февраля 2012

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

Следующая настройка, по-видимому, прервала запись в FileLog.Что я делаю не так?

<sources>
  <source name="MySource" switchName="MySource.Switch">
    <listeners>
      <add name="FileLog"/>
    </listeners>
  </source>
  <source name="MySource" switchName="MySource.SystemSwitch">
    <listeners>
      <add name="EventLog"/>
    </listeners>
  </source>
</sources>
<switches>
  <add name="MySource.Switch" value="Verbose"/>
  <add name="MySource.SystemSwitch" value=Error"/>
</switches>

1 Ответ

6 голосов
/ 02 октября 2012

Вы включаете <source> только по одному на источник с несколькими слушателями, а затем добавляете фильтры для слушателей, например так:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="Service" switchValue="Information">
        <listeners>
          <clear />
          <add name="RollingFile" />
          <add name="EventLog" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="RollingFile"
        type="Essential.Diagnostics.RollingFileTraceListener, Essential.Diagnostics"
        initializeData="{ApplicationName}-{DateTime:yyyy-MM-dd}.log"
        template="{LocalDateTime:yyyy-MM-dd HH:mm:ss.fff} {Message}{Data}"
      />
      <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="YourAppName">
        <filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning" />
      </add>
    </sharedListeners>
  </system.diagnostics>
</configuration>
...