TraceLogging 托管快速入门

以下部分介绍将 TraceLogging 添加到 .NET 代码所需的基本步骤。

先决条件

  • .NET 4.6 或更高版本。

SimpleTraceLoggingExample.cs

此示例演示如何记录 TraceLogging 事件,而无需手动创建单独的检测清单 XML 文件。

using System;
using System.Diagnostics.Tracing;

namespace SimpleTraceLoggingExample
{
    class Program
    {
        private static EventSource log = new EventSource("SimpleTraceLoggingProvider");
        static void Main(string[] args)
        {
            log.Write("Event 1"); // write an event with no fields
            log.Write("Event 2", new { someEventData = DateTime.Now }); // Sending an anonymous type as event data

            ExampleStructuredData EventData = new ExampleStructuredData() { TransactionID = 1234, TransactionDate = DateTime.Now };
            log.Write("Event 3", EventData); // Sending a class decorated with [EventData] as event data
        }
    }

    [EventData] // [EventData] makes it possible to pass an instance of the class as an argument to EventSource.Write()
    public sealed class ExampleStructuredData
    {
        public int TransactionID { get; set; }
        public DateTime TransactionDate { get; set; }
    }
}

创建 EventSource

在记录事件之前,必须创建 EventSource 类的实例。 第一个构造函数参数标识此提供程序的名称。 将自动为你注册提供程序,如示例中所示。

private static EventSource log = new EventSource("SimpleTraceLoggingProvider");

实例是静态的,因为应用程序中一次只能有一个特定提供程序的实例。

日志 TraceLogging 事件

创建提供程序后,上述示例中的以下代码将记录一个简单的事件。

log.Write("Event 1"); // write an event with no fields

记录结构化事件有效负载数据

可以定义与 事件一起记录的结构化有效负载数据。 以匿名类型或类实例的形式提供结构化有效负载数据,该类已使用 [EventData] 属性进行批注,如以下示例所示。

log.Write("Event 2", new { someEventData = DateTime.Now }); // Sending an anonymous type as event data

ExampleStructuredData EventData = new ExampleStructuredData() { TransactionID = 1234, TransactionDate = DateTime.Now };
log.Write("Event 3", EventData); // Sending a class decorated with [EventData] as event data

必须将 属性添加到 [EventData] 定义的事件有效负载类,如下所示。

[EventData] // [EventData] makes it possible to pass an instance of the class as an argument to EventSource.Write()
public sealed class ExampleStructuredData
{
    public int TransactionID { get; set; }
    public DateTime TransactionDate { get; set; }
}

属性取代了手动创建清单文件来描述事件数据的需求。 现在,只需将 类的实例传递给 EventSource.Write () 方法,以记录事件和相应的有效负载数据。

总结和后续步骤

有关如何使用最新内部版本的 Windows Performance Tools (WPT) 捕获和查看 TraceLogging 数据的信息,请参阅 记录和显示 TraceLogging 事件

有关更多托管 TraceLogging 示例,请参阅 .NET TraceLogging 示例。