如何在 Windows IoT 中记录事件?

And*_*ykh 3 c# powershell etw win-universal-app windowsiot

Windows IoT 的 WebUI(如 Raspberry PI 所示)具有以下事件跟踪屏幕:

在此处输入图片说明

如何从 uwp 程序写入事件日志,然后检查其中写入的内容?

此答案(与 Windows IoT 无关)表明您需要为其使用标准 System.Diagnostics.Tracing 类。此答案所指的示例是演示日志记录到文件。在登录到内置工具(例如 ETW)后,我更喜欢。

遵循与示例中类似的逻辑,我正在执行EventSource.Write并且它不会抛出错误,但无处可见写入的消息。

适用于 Window IoT 的 Windows Powershell 也不支持 Get-EventLog 命令。

Windows IoT 开发相对较新,所以网上资料不多。目前最好的来源是Ms Iot Samples,但尽管样本数量庞大,但似乎没有人进行任何事件记录。

And*_*ykh 5

  1. 阅读并理解EventSource 用户指南
  2. 将一个派生自EventSource的类添加到您的项目中,并按照链接指南中的描述实现您的方法。这里提供一个示例实现。
  3. 构建您的项目,找到项目输出 (yourProject.winmd)
  4. 这里获取 EventRegister.exe 实用程序
  5. 运行EventRegister.exe -UsersGuide。阅读并理解用法。
  6. 运行eventRegister.exe -DumpRegDlls yourProject.winmd。这将生成yourProject.MyEwtProvider.etwManifest.dllyourProject.MyEwtProvider.etwManifest.man文件。
  7. 例如,在 Windows IoT 设备上创建一个新文件夹,C:\Events或使用现有文件夹。
  8. yourProject.MyEwtProvider.etwManifest.man在编辑器中打开并编辑resourceFileNamemessageFileName路径,以便父文件夹是C:\Events
  9. 复制yourProject.MyEwtProvider.etwManifest.dllyourProject.MyEwtProvider.etwManifest.man到Windows物联网到的C:\Events文件夹。注意:最简单的方法是像\\yourdevice\c$在 Windows 资源管理器中一样打开 Windows 共享
  10. 使用 Powershell 连接到您的 Windows IoT。跑cd C:\Events
  11. 运行wevtutil.exe im .\yourProject.MyEwtProvider.etwManifest.man。这不应产生任何警告或错误。有关语法的详细信息,请参阅此页面wevtutil.exe

现在,如果您按照问题导航到 ETW WebUI 页面,“MyEwtProvider”将出现在下拉列表中。您可以通过调用以下程序之一在程序中记录事件UwpEventSource.Log.Info/Warn/Debug/Critical/Error("Hello from my porgram");

如果您不想在不使用 WebUI 时收集事件,您就完成了。如果您希望能够保留这些并稍后分析它们,请在您的 powershell 会话中运行以下命令:

echo y | wevtutil.exe sl MyEwtProvider/Debug /e:true
Run Code Online (Sandbox Code Playgroud)

看看它在这里做什么。现在,您将能够通过运行来检索历史数据(一旦您积累了它们):

wevtutil.exe qe MyEwtProvider/Debug
Run Code Online (Sandbox Code Playgroud)