Простая трассировка в 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