首页
社区
课程
招聘
[原创]如何通过 ETW Provider 来记录应用日志
发表于: 2025-2-6 15:55 6346

[原创]如何通过 ETW Provider 来记录应用日志

2025-2-6 15:55
6346

最近在做一些性能优化的时候,发现很多应用经常会出现文件 I/O 爆高,但又没做啥事情。结果分析下来发现,都是在写日志。

于是就有了这么一篇,怎么利用 Windows 自己提供的 ETW 来记录应用日志。

ETW(Event trace for Windows) 是 Windows 提供的一种事件跟踪机制,可以用来记录应用程序的运行时事件。

ETW Provider 提供的日志相比文件日志,主要有以下优点:

作为普通应用程序,没法直接使用微软的标准库来做,这里会相对麻烦一点。但通过微软提供的一些工具,可以稍微提升一定的效率。

我们采取基于清单的方式来创建 provider。

我们可以通过 SDK 中自带的图形化工具(ecmangen.exe)来生成清单文件。

如果你安装了 8.1 的 SDK,你可以在 C:\Program Files (x86)\Windows Kits\8.1\bin\x64\ 找到它。

如果你没安装,可以在附件中下载到。


打开它,会得到一个这样的应用:

然后就可以开始创建 provider 了。

选择【Events Section】部分,右击,选择【New】-【Provider】

根据提示,填写好 NameSymbolGUID(可以自动生成一个)、Decoding file locations(这个可以后面再进行修改的)

如下图所示:

下一步,我们就要开始创建我们的 event 了。开始 Event 之前,我们需要先创建一些关键属性处理,以方便 Event 创建的时候进行选择。

关于基础属性,详细介绍可以看:ETW:Windows 事件追踪

这里,我们需要创建或修改的有:

还有额外的一些属性可以按需使用。

关键就是创建 Event 了,这是对日志的直接表达。

需要定义 Symbol、EventId、Event Version(主要用于版本管理)和一些基础属性,这个需要根据业务定义来。

如下是场景激活事件的事件详情,供参考。

然后按需完成事件的增加。满足需求后,通过【File】-【Save/Save As】将 man 文件保存即可。

于是我们就得到了我们的 xxx.man 清单文件。

创建完清单文件,接下来就可以通过清单文件生成宏信息,在代码中调用更方便。

这里需要用到 mc.exe,可以通过 man 文件来生成 .h.rc.bin文件。

mc.exe 是跟随 win10 的 SDK 带下来的。

于是,我们就可以创建 VS 项目,然后引入 .h 和 .rc 进行使用了。

这里需要把 .h 和 .rc 和 bin 文件加到项目中。

然后,就可以开始写代码了。.h 中有了较多的宏,所以写起来也非常的方便。

直接放代码:


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-3-25 09:30 被frendguo编辑 ,原因: 添加附件
上传的附件:
收藏
免费 49
支持
分享
最新回复 (23)
雪    币: 186
活跃值: (3411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
让我看看
2025-2-10 19:02
0
雪    币: 243
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
图片怎么都挂了
2025-2-15 13:14
0
雪    币: 762
活跃值: (1248)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
yazigegeda 图片怎么都挂了
已更新~
2025-3-25 09:30
0
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
看看
2025-3-26 11:51
0
雪    币: 0
活跃值: (516)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2025-5-3 13:50
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
mark
2025-5-21 14:50
0
雪    币: 202
活跃值: (521)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
mark
2025-5-22 08:57
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
1
2025-7-15 02:45
0
雪    币: 10
活跃值: (1414)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark
2025-7-15 11:16
0
雪    币: 83
活跃值: (770)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看看
2025-7-28 18:36
0
雪    币: 0
活跃值: (395)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
etw trace
2025-7-28 20:01
0
雪    币: 0
活跃值: (1966)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
看看学习一下
2025-7-28 20:37
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
学习
2025-10-14 10:56
0
雪    币: 2884
活跃值: (6513)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
6666666666666666666666
2025-10-14 11:50
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
mark
2025-10-15 10:00
0
雪    币: 1507
活跃值: (300)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
17
mark
2025-10-17 04:39
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
666666666666
2025-11-12 11:41
0
雪    币: 0
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
666
2025-11-17 22:52
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
1111
2025-11-18 15:33
0
雪    币: 2
活跃值: (638)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
有点意思
2025-11-30 13:16
0
雪    币: 206
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
666
2025-11-30 14:22
0
雪    币: 1898
活跃值: (542)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
666666
2025-12-14 18:06
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24
666666
2025-12-23 13:04
0
游客
登录 | 注册 方可回帖
返回