標籤:技術 應用程式 記錄 設定檔 error
一、為什麼需要用到跟蹤技術:
利用跟蹤功能可以從正在啟動並執行應用程式(發布後的程式)中查看訊息。我們把定義訊息(不同層級的訊息)的代碼寫在應用程式中,根據設定檔中配置,從而寫入不同層級的訊息。這些訊息會寫入到哪呢?vs預設是寫入到輸出視窗上的。輸出視窗只能在調試狀態下看的見。當我們跟蹤發布後的程式那怎麼辦呢?我們需要在設定檔中定義一個接聽程式,來接受從應用程式中寫入的訊息。下面來具體的介紹跟蹤
二、跟蹤體系架構:
①,跟蹤源:跟蹤資訊的源頭。例如:需要跟蹤程式集或跟蹤某個命名空間或某個類
②,開關:開關定義了要記錄的資訊層級。例如:可以請求錯誤資訊或詳細詳細
③,接聽程式:定義了寫入跟蹤訊息的位置。
④,篩選器:篩選要記錄的資訊層級。例如:開關定義了Information層級,可以用過篩選只記錄Error資訊層級
需要引用命名空間:using System.Diagnostics;
三、參數對照表
幾種接聽程式類型
| 接聽程式 |
描述 |
| System.Diagnostics.XmlWriterTraceListener |
寫入Xml檔案 |
| System.Diagnostics.TextWriterTraceListener |
寫入文本 |
| System.Diagnostics.DelimitedListTraceListener |
寫入帶有分隔字元的文本,設定檔屬性( delimiter=":")設定分隔字元號 |
| System.Diagnostics.EventLogTraceListener |
寫入事件記錄 |
| WebPageTraceListener |
寫入web追蹤檔案trace.axd中 |
TraceEventType跟蹤事件類型(<filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/>
)
| 事件 |
描述 |
| Critical |
定義了致命錯誤或應用程式崩潰 |
| Error |
表示可恢複的錯誤 |
| Information |
資訊性訊息 |
| Verbose |
調試跟蹤 |
| Warning |
非關鍵性問題(警告) |
| Transfer |
相關標識的更改 |
| Start |
邏輯操作的開始 |
| Stop |
邏輯操作的停止 |
| Suspand |
邏輯操作的掛起 |
| Resume |
邏輯操作的恢複 |
SourceLevels開關層級(<add name="myTraceInfo" value="Off"/>
)
| 層級 |
描述 |
| ActivityTracing |
允許 Stop、Start、Suspend、Transfer 和 Resume 事件通過。 |
| All |
允許所有事件通過。 |
| Critical |
只允許 Critical 事件通過。 |
| Error |
允許 Critical 和 Error 事件通過。 |
| Information |
允許 Critical、Error、Warning 和 Information 事件通過。 |
| Off |
不允許任何事件通過。 |
| Verbose |
允許 Critical、Error、Warning、Information 和 Verbose 事件通過。 |
| Warning |
允許 Critical、Error 和 Warning 事件通過。 |
TraceOptions制定要寫入跟蹤輸出中的跟蹤資料選項(接聽程式的traceOutputOptions屬性
)
| 參數 |
描述 |
| Callstack |
寫入呼叫堆疊 |
| DateTime |
寫入日期和時間 |
| LogicalOperationStack |
寫入邏輯操作堆棧 |
| None |
不寫入如何操作 |
| ProcessId |
寫入進程標識 |
| ThreadId |
寫入線程標識 |
| Timestamp |
寫入時間戳記 |
四、配置追蹤檔案:
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <system.diagnostics> <!-- ====定義源=== --> <sources><!-- 跟蹤源 開關名稱 開關類型 --> <source name="TraceDome4" switchName="myTraceDome4" switchType ="System.Diagnostics.SourceSwitch"> <listeners> <add name="XmlTraceListener"></add><!--引用接聽程式--> <add name="DelimitedTraceListener"> <!--(源篩選)只顯示TraceInfo程式集的跟蹤--> <!--<filter type="System.Diagnostics.SourceFilter" initializeData="TraceInfo"/>--> <!--(跟蹤事件類型篩選)唯寫入事件類型為Error的資訊--> <!--<filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/>--> </add> </listeners> </source> </sources> <!-- ============= --> <!-- ====接聽程式=== --> <sharedListeners><!-- 接聽程式類型 輸出中的跟蹤資料選項 輸出位置--> <add name="XmlTraceListener" type="System.Diagnostics.XmlWriterTraceListener" traceOutputOptions="Callstack,LogicalOperationStack" initializeData="myTraceDome4.xml"></add> <add name="DelimitedTraceListener" type="System.Diagnostics.DelimitedListTraceListener" delimiter=":" traceOutputOptions="DateTime" initializeData="DelimitedTraceListener.txt"></add> </sharedListeners> <!-- ============= --> <!-- ====開關=== --> <switches><!-- 開關名稱 開關層級 --> <add name="myTraceDome4" value="All"/> </switches> <!-- ============= --> <!--在這個問題上一直搞了很長一段時間,原來是這個沒有配置。如果不配置這個,就不會寫入檔案--> <!--自動重新整理(必須)--> <trace autoflush="true" /> </system.diagnostics> </configuration>
五、在應用程式中寫入訊息代碼
本文出自 “程式猿的家--Hunter” 部落格,請務必保留此出處http://962410314.blog.51cto.com/7563109/1599988
C#跟蹤