溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#如何實現跟蹤

發布時間:2021-11-24 14:37:33 來源:億速云 閱讀:670 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關C#如何實現跟蹤的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、為什么需要用到跟蹤技術:

        利用跟蹤功能可以從正在運行的應用程序(發布后的程序)中查看消息。我們把定義消息(不同級別的消息)的代碼寫在應用程序中,根據配置文件中配置,從而寫入不同級別的消息。這些消息會寫入到哪呢?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>

五、在應用程序中寫入消息代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace TraceDome4
{
    class Program
    {
        //跟蹤源
        internal static TraceSource trace = new TraceSource("TraceDome4");
        static void Main(string[] args)
        {
            //邏輯操作的開始
            trace.TraceEvent(TraceEventType.Start, 0, "邏輯操作的開始");
            //寫入普通消息
            trace.TraceInformation("寫入消息");
            //寫入錯誤消息,根據TraceEventType枚舉不同的消息級別
            trace.TraceEvent(TraceEventType.Error, 0, "錯誤消息");
            //邏輯操作的結束
            trace.TraceEvent(TraceEventType.Stop, 0, "邏輯操作的結束");
            //寫入普通消息
            trace.TraceInformation("寫入消息");
        }

    }
}

使用服務跟蹤查看器,查看xml

C#如何實現跟蹤

C#如何實現跟蹤

五、在應用程序中寫入消息代碼(相關性)

    使用相關性必須給跟蹤數據選項設置Callstack,LogicalOperationStack

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Threading;
namespace TraceDome4
{
    class Program
    {
        //跟蹤源
        internal static TraceSource trace = new TraceSource("TraceDome4");
        static void Main(string[] args)
        {
            //設置一個活動ID
            Trace.CorrelationManager.ActivityId = Guid.NewGuid();
            //邏輯操作的開始
            trace.TraceEvent(TraceEventType.Start, 0, "邏輯操作的開始");
            //啟用線程上的邏輯操作
            Trace.CorrelationManager.StartLogicalOperation("Main Operation");
            //寫入普通消息
            trace.TraceInformation("寫入消息");
            //寫入錯誤消息,根據TraceEventType枚舉不同的消息級別
            trace.TraceEvent(TraceEventType.Error, 0, "錯誤消息");
            //開啟一個線程
            Thread th = new Thread(new ThreadStart(Simple));
            th.Start();

            //停止線程上的邏輯操作
            Trace.CorrelationManager.StopLogicalOperation();
            //邏輯操作的結束
            trace.TraceEvent(TraceEventType.Stop, 0, "邏輯操作的結束");

        }

        private static void Simple()
        {
            //設置一個活動ID
            Trace.CorrelationManager.ActivityId = Guid.NewGuid();
            //啟用線程上的邏輯操作
            Trace.CorrelationManager.StartLogicalOperation("Simple Operation");
            //寫入警告消息
            trace.TraceEvent(TraceEventType.Warning, 0, "警告消息");
            //停止線程上的邏輯操作
            Trace.CorrelationManager.StopLogicalOperation();
           
        }
 

    }
}

C#如何實現跟蹤

感謝各位的閱讀!關于“C#如何實現跟蹤”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女