如何在Windows IoT中记录事件?

用于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,但尽管样本量很大,但似乎没有任何事件记录。

  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 IoT到C:\Events文件夹。 注意:最简单的方法是在Windows资源管理器中以\\yourdevice\c$打开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");一个来记录程序中的事件UwpEventSource.Log.Info/Warn/Debug/Critical/Error("Hello from my porgram");

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

 echo y | wevtutil.exe sl MyEwtProvider/Debug /e:true 

看看它在这里做了什么。 现在,您可以通过运行以下命令检索历史数据(一旦累积了它们):

 wevtutil.exe qe MyEwtProvider/Debug