Простая трассировка в ASP.NET 4

Я хотел бы использовать класс System.Diagnostics.Trace для простой трассировки моего приложения в текстовом файле. Причина, по которой я хочу использовать это, а не log4net или любое другое решение, это потому что... это должно быть просто:)

Итак, я получил это работает в C#:

        TextWriterTraceListener listener = new TextWriterTraceListener(Server.MapPath("~/App_Data/log.txt"));
        listener.Filter = new EventTypeFilter(SourceLevels.Warning);
        Trace.Listeners.Add(listener);

Или его эквивалент в Web.config:

  <system.diagnostics>
    <sharedListeners>
      <add name="log" type="System.Diagnostics.TextWriterTraceListener" initializeData="App_Data/log.txt">
        <filter type="System.Diagnostics.EventTypeFilter"  initializeData="Warning" />
      </add>
    </sharedListeners>
    <trace autoflush="true">
      <listeners>
        <clear/>
        <add name="log"/>
      </listeners>
    </trace>
  </system.diagnostics>

Поэтому, когда я выполню это:

        Trace.TraceInformation("info");
        Trace.TraceWarning("warning");
        Trace.TraceError("error");

Я получил строки о предупреждении и ошибке, это то, что я ожидал. Проблема в том, как мне использовать остальные уровни, которые появляются в перечислении SourceLevels?

Есть ли какой-либо недостаток или использование System.Diagnostics.Trace для веб-приложений? (autoflush установлен в true только для целей тестирования)

Приветствия.

1 ответ

Решение

Вам нужно немного больше конфигурации. Этот блок кода регистрирует все ошибки в одном файле, а все узлы Information и ActivityTracing - в другом. (Этот пример предназначен для WCF, вам нужно будет указать свои имена так, как вам нужно.)

<system.diagnostics>
<sources>
  <source name="System.ServiceModel"
          switchValue="Information, ActivityTracing"
          propagateActivity="true" >
    <listeners>
      <add name="xml"/>
    </listeners>
  </source>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="xml"/>
    </listeners>
  </source>
  <source name="ServiceFaultInfoTrace"
          switchName="sourceSwitch"
          switchType="System.Diagnostics.SourceSwitch">
    <listeners>
      <add name="ServiceFaultInfoTraceText" />
      <remove name="Default"/>
    </listeners>
  </source>
</sources>
<switches>
  <add name="sourceSwitch" value="Error"/>
</switches>
<trace autoflush="true" indentsize="4">
  <listeners>
    <add name="ServiceFaultInfoTraceText" />
  </listeners>
</trace>
<sharedListeners>
  <add name="xml"
       type="System.Diagnostics.XmlWriterTraceListener"
       initializeData="C:\log\Api-Traces.svclog" />
  <add name="ServiceFaultInfoTraceText"
       type="System.Diagnostics.TextWriterTraceListener"
       traceOutputOptions="DateTime"
       initializeData="C:\log\Api-Errors.txt" />
</sharedListeners>
</system.diagnostics>

Важными узлами являются узлы switchValue (и switchName). Установите их на любой уровень, который вы хотите зарегистрировать для источника.

http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelevel.aspx

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