【问题标题】:ETW/Eventsource tracing to file (dump)ETW/Eventsource 跟踪到文件(转储)
【发布时间】:2015-08-20 08:20:36
【问题描述】:

我使用 ETW 在我的应用程序中进行跟踪。所以我创建了一个自定义的EventSourceEventListener

现在我想从客户端使用此跟踪。例如,我希望我的应用程序在遇到未处理的异常时将跟踪日志转储到文件中,这样我就可以远程知道发生了什么(所以我想要跟踪转储)。

问题 1:ETW 是为此设计的(转储)还是只是一个跟踪工具,我必须实施另一个不同的解决方案?

问题 2:(如果问题 1 => ETW 可以做这样的事情)我怎样才能做到这一点?

编辑:这是针对 Windows 10 通用应用程序的。

【问题讨论】:

  • 正是我正在寻找的解决方案类型。除了我运行一个通用应用程序(Windows 10)之外,这个库与它不兼容(据我所知)。这仍然非常有趣,并且描述了如果我想自己写我必须做的事情。 :)
  • 其实根据Grigori Melnik(他是微软模式和实践的首席项目经理)这个库支持Windows Store apps....
  • 在这种情况下我可能不得不自己重新编译它;任何 Nuget 包都可用于此配置。顺便说一句,您的链接说它支持 Windows 商店应用程序,而不是通用应用程序。

标签: c# logging win-universal-app etw


【解决方案1】:

您不能在 UWP 中使用语义日志,因为它与 .NET for UWP 不兼容。

问题 1:ETW 是为此设计的(转储)还是只是跟踪 工具,我必须实施另一个不同的解决方案?

Windows 事件跟踪 (ETW),顾名思义,它用于事件跟踪。您可以在事件查看器中查看事件详细信息。 转储文件是应用程序在进行转储时的快照。它显示了正在执行的进程以及加载了哪些模块。它不限于事件跟踪。例如,内核内存转储包含崩溃时内核正在使用的所有内存。 摘要:ETW 不是为转储而设计的。

问题 2:(如果问题 1 => ETW 可以做这样的事情)我怎么能 实现这个?

如果您想在一个文件中记录所有未处理的异常,您可以使用 ETW 来执行此操作。 有一个示例展示了如何使用 ETW(Windows 事件跟踪)命名空间将应用程序事件写入应用程序本地存储上的存储文件。虽然它是针对 Windows 应用商店应用的,但您仍然可以使用 UWP 项目中的源代码(复制 MetroEventSource.cs 和 StorageFileEventListener)。如果要将日志消息发送到远程客户端,则需要实现一个事件侦听器,例如 UDPEventListener 将消息发送到远程客户端。

Logging Sample for Windows Store Apps (ETW Logging in WinRT)

【讨论】:

  • 问题在于StorageFileEventListener总是 写入文件,一次一个事件。我不想要那个。如果发生错误,出于性能原因,我想将内存缓冲区写入磁盘
  • 可以,可以声明一个byte[2048]这样的字节数组为缓冲区,当缓冲区满时将缓冲区写入文件。
猜你喜欢
  • 1970-01-01
  • 2019-02-25
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多