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>

 

五、在应用程序中写入消息代码

 

 

本文出自 “程序猿的家--Hunter” 博客,请务必保留此出处http://962410314.blog.51cto.com/7563109/1599988

C#跟踪

上一篇:C#开发ActiveX控件及指纹采集


下一篇:【转】利用SEH和INT3实现API HOOK