我想使用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枚举中出现的其他级别?
Web应用程序是否有任何缺点或使用System.Diagnostics.Trace? (autoflush设置为true仅用于测试目的)
干杯。
答案 0 :(得分:5)
您需要更多配置。此代码块将所有错误记录到一个文件,将所有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