问题标签 [etw-eventsource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
enterprise-library - 是否有可以从 Azure 表存储读取日志消息的日志查看器应用程序?
Microsoft 最近发布了Enterprise Library 6,其中包含新的语义日志块。Semantic Logging Block 提供的选项之一是能够将日志消息写入Windows Azure 表存储,这听起来像是在我的基于 Azure 的应用程序中实现日志记录的好方法。不幸的是,我不确定如何处理日志——是否有任何日志查看器可以从 Azure 表存储中检索日志条目?我想我基本上是在寻找一个监视 Azure 表存储而不是文件的“尾部”实用程序。
.net-4.5 - 为什么在 EventSource 的子类上实现接口会在运行时抛出异常?
我正在尝试通过.NET 4.5 中包含的EventSource类在我的 .NET 应用程序中使用Windows 事件跟踪 (ETW) 。我将子类化为并尝试实现一个接口(用于模拟目的),如下所示:EventSource
MyEventSource
IMyEventSource
当我运行PerfView并执行此代码时,我收到了IndexOutOfRangeException
对WriteEvent
. 如果我通过修改代码来删除接口......
...然后一切正常。
这是我在这两种情况下用于测试的代码:
EventSource
如果我的子类只是实现一个接口,为什么它会中断?
这是一个相关的帖子。
.net - 使用 EventSource 记录 ETW 丢失事件的风险
我正在检测我的 .NET 4.5 应用程序以使用EventSource
该类发出 ETW 事件。目标是能够捕获其中一些事件(错误级别事件)以进行错误记录。
在做了一些阅读和测试之后,我担心这种错误记录方法的可靠性,特别是关于丢失或丢失事件的可能性。如果我的错误记录不起作用,我需要关闭应用程序(在我的情况下,它运行未报告的错误是不安全的)。使用 ETW 和EventSource
时,如何确定我的错误得到正确记录?
显然,部分答案将取决于监听事件的内容。就我而言,我计划使用最新的 MS 企业库中的“语义日志记录应用程序块”。
以下是 Microsoft 谈论错过事件的可能原因的一个来源: 关于事件跟踪
他们在那里列出了丢失事件的这些可能原因
总事件大小大于 64K。这包括 ETW 标头以及数据或有效负载。由于事件大小由应用程序配置,因此用户无法控制这些丢失的事件。
ETW 缓冲区大小小于总事件大小。用户无法控制这些丢失的事件,因为事件大小是由记录事件的应用程序配置的。
对于实时日志,实时消费者没有足够快地消费事件或完全不存在,然后支持文件被填满。如果在记录事件时停止并启动事件日志服务,则会出现这种情况。用户无法控制这些丢失的事件。
记录到文件时,磁盘速度太慢,无法跟上记录速度。
为了查看使用 EventSource 类是否以某种方式缓解了这些问题(例如,它是否会以某种方式截断大型有效负载),我进行了一些测试。我尝试记录长字符串,但它在 30,000 到 35,000 个字符之间失败(与 64KB 最大事件有效负载一致)。对于太大的字符串,它只是默默地没有做任何事情,在我的语义日志记录应用程序块日志中根本没有任何事件。之前和之后的事件像往常一样写。
所以每当我的有效载荷中有一个字符串时,我必须通过一些截断器传递它?我是否也需要手动避免生成“太快”的事件(这怎么可能)?
Microsoft Patterns and Practices 应该引导我们找到好的......模式和实践......所以也许我只是在这里遗漏了一些东西。
更新:
显然,在消费应用程序中有一些“事件太快”条件的通知。我今天第一次收到这个:
级别:警告,消息:由于缓冲区溢出或跟踪会话中的架构同步延迟,某些事件将丢失:Microsoft-SemanticLogging-Etw-svcRuntime
然后在关闭会话时:
级别:警告,消息:在跟踪会话“Microsoft-SemanticLogging-Etw-svcRuntime”中检测到丢失 1 个事件。
更新2:
Enterprise Library Developers Guide描述了我刚才提到的行为。
您应该监视语义日志记录应用程序块生成的日志消息,以了解缓冲区溢出和丢失消息的任何迹象。例如,事件 id 为 900 和 901 的日志消息表明接收器的内部缓冲区已溢出;在进程外场景中,事件 ID 806 和 807 表示 ETW 缓冲区已溢出。您可以修改接收器的缓冲配置选项,以减少缓冲区因典型工作负载而溢出的可能性。
我的问题仍然存在,我是否可以在使用语义日志记录的同时确保在删除错误时我的应用程序不会运行?可以丢弃正常的跟踪事件...
我目前的想法是使用老式日志记录技术在单独的类中记录“严重”错误,并通过 ETW 管道保留不太严重的错误(以及调试类型事件)。这真的不会太糟糕......如果我找不到更好的建议,我可能会将其作为解决方案发布。
更新 3:
我收到的“丢失事件”警告与缓冲区溢出无关,事实证明这是您将 nullstring
作为有效负载值传递时收到的消息。
c# - ETW EventSource .NET 4.5 的滚动文件
我一直在尝试在 .net 4.5 中使用 ETW。
我有一个 WCF 服务和控制台应用程序,我想要它使用 EventSource 来编写消息,但是,我很难理解如何创建自己的 ETW(EventSource 和 EventListener)以记录到文件(滚动文件)。
有什么建议么?
.net-4.5 - .Net 4.5 EventSource ETW 提供程序未显示在提供程序列表中
我一直在努力使用 .NET4.5 的新功能 ETW(EventSource)。我无法使用 perfmon->Data Collector Sets 将其显示在跟踪提供程序列表中。我能够使用 perfview 查看日志。我能够使用 EventSource 类的静态方法 GenerateManifest 从其生成清单。这将在 EventSource 类中提供 myevents 的清单,但它不包含有关通道的详细信息。
我的问题是如何在为 perfmon 跟踪会话生成清单文件后添加通道特定信息?我还想使用 Perfmon 的跟踪会话来启用提供程序而不是 perfview。
非常感谢任何输入。
.net-4.0 - EventSource .net 4.0 生成清单
我一直在尝试在 .net 4.0 中使用 ETW。
我已经开始使用 Microsoft EventSource Library 1.0.4-beta ( https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource )
这是我为我的应用程序生成事件而编写的代码。
我无法从侦听器生成清单。下面的代码
当我尝试调用它时,我得到 NullReferenceException,请建议我遗漏任何东西。是否可以使用此版本将 EventMessage 推送到 EventViewer。
作为这个 NuGet 包的一部分,我有 eventRegister、Install Bat、Microsoft.Diagnostics.Tracing.EventSource.targets。我不确定这些将如何帮助清单生成。
如果有人对此有任何想法(或)工作,请提供帮助。
提前致谢。
.net - 是否可以在 ETW 中对 EventSource 进行子类化?
我希望能够声明一个 EventSource,它至少有几个默认提供常规日志记录工具的方法。
例如
- 信息()
- 警告()
- 错误()
此外,我希望能够在每个服务中定义一个从提供上述内容的基类继承的特定事件源。目前,创建清单的 EventRegister.exe 应用程序抱怨必须密封事件源。
我做错了吗?如果是这样,我该如何实现上述目标?见示例代码:
我正在使用最新最好的 Microsoft.Diagnostics.Tracing(pre),据我了解,它支持 Channels,这与 Enterprise Library 中的 SLAB 不同。
.net - 运行时的 ETW 事件源名称
我想知道,如果我们可以在运行时设置 EventSource Name。
我有多个应用程序想要登录到不同的事件源。如果这可以配置,我可以重用 EventViewer 的组件。
有关 EventSourceAttribute 的附加信息
提前致谢。
.net - 基于名称 .Net 4.0 的 ETW 提供者指南
我想根据事件提供者名称获取事件提供者指南(例如:示例测试)
示例代码
这是我的提供者
我用于记录事件的记录器类
请根据 EventSourceName 建议获取 GUID 所需的代码。我已经注册了 Eventvwr。
.net - 使用 ETW 记录异常的最佳方法是什么?
是否有使用 ETW 记录异常的标准方法?
据我所知,唯一的方法是记录消息和可能的内部异常消息,因为异常类型没有强类型参数。