随笔 - 234, 文章 - 12, 评论 - 1671, 阅读 - 74万
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

WF4:ETW跟踪参与者

Posted on   生鱼片  阅读(3207)  评论(5编辑  收藏  举报

WF4中的跟踪服务是通过跟踪参与者直接监听运行时放出的跟踪记录,并以根据选择的方式来处理它们。我们可以将日志记录到不同的媒介中,本文我们看看WF4中支持的ETW跟踪参与者。

Windows® 事件跟踪 (ETW) 是操作系统提供的一个高速通用的跟踪工具。ETW 使用内核中实现的缓冲和日志记录机制,提供对用户模式应用程序和内核模式设备驱动程序引发的事件的跟踪机制。此外,ETW 使您能够动态地启用和禁用日志记录,轻松地在实际生产环境下进行详细跟踪,而无需重新启动系统或重新启动应用程序。日志记录机制使用每处理器的缓冲区,由异步写线程将这些缓冲区写入磁盘。这样,大型服务器应用程序在写入事件时所受的干扰能够降至最小。

我们新建一个工作流项目,工作流的设计中我们随便加上几个Activity即可,如下:

clip_image002

下面我们来看看如何配置ETW跟踪,代码如下:

//ETW tracking setup

TrackingProfile trackingProfile = new TrackingProfile();

trackingProfile.Queries.Add(new WorkflowInstanceQuery

{

States = { "*"}

});

trackingProfile.Queries.Add(new ActivityStateQuery

{

States = { "*" }

});

trackingProfile.Queries.Add(new CustomTrackingQuery

{

ActivityName="*",

Name="*"

});

EtwTrackingParticipant etwTrackingParticipant = new EtwTrackingParticipant();

etwTrackingParticipant.TrackingProfile = trackingProfile;

在上面代码中我们可以选择记录那些跟踪信息,这个信息是通过跟踪配置文件来完成的,可以根据你的需求来定制,完成之后我们需要将etwTrackingParticipant以扩展点的方式添加到工作流中,代码如下:

AutoResetEvent autoResetEvent=new AutoResetEvent(false);

WorkflowApplication workflowApplication = new WorkflowApplication(new Workflow1());

workflowApplication.Completed = (arg) => { autoResetEvent.Set(); };

workflowApplication.Extensions.Add(etwTrackingParticipant);

workflowApplication.Run();

autoResetEvent.WaitOne();

之后我们运行工作流,结果很简单:

clip_image004

我们打开windows的事件查看器,切换到下图位置可以到有相关的信息记录在上面,这就是工作流运行后的信息:

clip_image006

我们可以看到工作流运行的详细信息如下:

clip_image008

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示