【问题标题】:How do I log events in Windows IoT?如何在 Windows IoT 中记录事件?
【发布时间】:2016-08-08 23:09:29
【问题描述】:

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

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

This answer(与 Windows IoT 无关)建议您需要使用标准 System.Diagnostics.Tracing 类。该答案所指的示例是演示记录到文件。登录到 ETW 等内置设施后,我更喜欢了。

遵循与示例中类似的逻辑,我正在执行EventSource.Write,它不会引发错误,但看不到书面消息。

Windows IoT 的 Windows Powershell 也不支持 Get-EventLog 命令。

Windows IoT 开发相对较新,因此互联网上没有太多信息。目前最好的来源是Ms Iot Samples,但尽管有大量样本,但它们似乎都没有进行任何事件记录。

【问题讨论】:

    标签: c# powershell win-universal-app etw windowsiot


    【解决方案1】:
    1. 阅读并理解EventSource User’s Guide
    2. 向您的项目添加一个派生自EventSource 的类,并按照链接指南中的说明实现您的方法。 here 提供了一个示例实现。
    3. 构建您的项目,找到项目输出 (yourProject.winmd)
    4. here 获取 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 语法的详细信息,请参阅this page

    现在,如果您导航到您的 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
    

    看看它的作用here。现在你可以通过运行来检索历史数据(一旦你积累了它们):

    wevtutil.exe qe MyEwtProvider/Debug
    

    【讨论】:

    • 请问您使用的是什么项目类型?我正在为 Raspberry Pi 进行编译,而我的项目没有生成 winmd 文件。我尝试将事件源类移动到“Windows 运行时组件”项目,但这不会接受来自 EventSource 的继承。
    • @Jasper,项目类型为“类库(通用 Widnows)”,然后在项目属性中选择输出类型为“Windows 运行时组件”
    • 一旦我将输出切换到 Windows 运行时组件,我就会收到这些构建错误:“Windows 运行时类 'MyApp.Universal.Log.MinimalEventSource' 的基类型无效,'System.Diagnostics .Tracing.EventSource'。类必须派生自 System.Object 或可组合的 Windows 运行时类。不允许实现继承。"
    • @Jasper 你的project.json 是什么样的?
    • { "dependencies": { "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0" }, "frameworks": { "uap10.0": {} }, "runtimes": { " win10-arm”:{},“win10-arm-aot”:{},“win10-x86”:{},“win10-x86-aot”:{},“win10-x64”:{},“win10 -x64-aot": {} } }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多