2011-08-10 48 views
2

我想使用System.Diagnostics.Trace類在文本文件中執行我的應用程序的簡單跟蹤。我想用這個,而不是log4net的或任何其他解決方案的原因,那是因爲......它必須是簡單的:)在ASP.NET中進行簡單跟蹤4

所以,我在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僅用於測試目的)

乾杯。

回答

5

您需要多一點配置。此代碼塊會將所有錯誤記錄到一個文件,並將所有信息和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(和交換機名稱)節點。將它們設置爲您希望爲來源記錄的任何級別。

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

+0

,我如何登錄,例如,使用SourceLevels.Critical東西System.Diagnostics.Trace? – vtortola

+0

在switchValue或switches節點中將Critical Information或Error替換爲Critical。 – BNL

+0

不,我的意思是,如何從C#代碼可以登錄到SourceLevels.Critical?在Trace類中,只有「信息」,「警告」和「錯誤」的方法,但我不知道如何調用其餘的關卡。 – vtortola