问题标签 [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.

0 投票
1 回答
171 浏览

.net - 使用 EventSource 时,我应该记录两个事件,还是计算持续时间并只记录一个?

假设我有一些方法要跟踪其性能信息。使用System.Diagnostics.Tracing.EventSource,我可以看到两种合乎逻辑的方法;首先,可以编写两个事件,一个在开始,一个在结束,然后事件的使用者可以计算持续时间:

或者,我可以自己计算持续时间,并且只编写一个事件:

第二种方法的好处是不涉及数学。缺点是我必须创建秒表,操作它,并写出数据,即使没有人在听。这也是一行额外的代码,主观上并没有那么“漂亮”。

哪个是首选方法?“最佳实践”怎么说?

0 投票
2 回答
2392 浏览

c# - ETW 日志记录 - TraceEventSession 覆盖文件

我有一个 IIS 应用程序,它使用 TraceEventSession 来捕获 ETW 消息并将它们转发到日志文件中:-

它工作正常,但由于某种原因,每次我重新启动应用程序时,它都会覆盖日志文件而不是附加到它。知道我错过了什么吗?

提前致谢

0 投票
1 回答
5739 浏览

node.js - 使用 EventSource 获取有关错误的信息

我试图在 NodeJs 中使用EventSource时获取有关错误的信息,我认为您可以通过以下示例更好地理解我:

onerror函数中,我想获取有关错误的信息,但它event是空的或未定义的以及es对象(嗯,这个对象只是带有一对花括号{})。如果出现错误,我想读取响应标头,例如:

这可能吗?我错过了什么?我认为答案应该很简单,但我是 NodeJs 的新手。

0 投票
3 回答
583 浏览

.net - 依赖关系在大型应用程序中为语义日志实现 EventSource

我正在开发一个由三个 Windows 服务和几个普通 Windows 应用程序 (.exe) 组成的大型产品。现在我们要转移到 ETW 和语义日志记录,并使用 Microsoft.Diagnostics.Tracing.EventSource。

我在某处读到应用程序的所有逻辑连接部分都应该使用相同的事件源。这意味着我们希望我们的服务有一个几乎单一的 EventSource。但是我们如何在不引入产品中几乎所有程序集之间的依赖关系的情况下做到这一点呢?

该应用程序当前包含大约 70 个程序集。为了能够在 EventSource 中创建例如接受枚举值的日志方法,包含事件源的程序集必须引用定义枚举的程序集,这意味着需要将枚举定义从使用它的程序集,也许是一个 .exe,到所有程序集引用的东西。

是否有某种方法可以在一个仍使用相同 ETW EventSource 的应用程序中从 EventSource 派生多个类?或者,在这种情况下,当不希望引入一大堆新的依赖项来创建日志类时,用 ETW 实现语义日志记录的好方法是什么?

0 投票
1 回答
174 浏览

visual-studio-2013 - Concurrency Visualizer unable to see custom ETW event

I have a custom EventSource that I am using to log an ETW event:

I have added my EventSource details to the Markers tab of the Advanced Settings dialog (from the Analyze menu in VS 2013) with it's correct Name and Procider GUID (I know these are correct as I can see the events in PerfView) and logging level = Everything.

When I run Concurrency Visualizer from Visual Studio I am unable to see my custom EventSource events though. However I can see other event sources (eg. some from the System.Collections.Concurrent provider)

Any help greatly appreciated, thanks.

0 投票
2 回答
3328 浏览

c# - 为什么要限制 EventSource 方法的参数类型和计数

我目前正在 C# 中使用 Microsoft EventSources 进行试验。一个限制如下

...传递给 ETW 方法的参数的数量和类型必须与传递给它调用的 WriteEvent 重载的类型完全匹配。例如:

这基本上限制了您在 EventSource 类中编写更丰富的 API。这基本上意味着您不能创建接收自定义对象的方法,并且在方法主体中您可以将其序列化为字符串(或 WriteEvent 重载支持的其他类型)。

您唯一可以决定的是方法名称和参数名称以及反映 WriteEvent 重载的计数。还是我错了?

0 投票
1 回答
829 浏览

c# - 如何在 ETW EventSource 中定义名称层次结构?

在我的项目中,我像这样使用 System.Diagnostics.Tracing.EventSource:

我通过在“附加提供者”字段中定义“*kafka4net”来使用具有动态提供者功能的 PerfView。这将通过其名称解析提供者。工作得很好。除了一个例外。我看到的事件是 kafka4net/Connecting,而我想看到 kafka4net/ConnectionTrace/Connecting。

一般来说,我希望事件是产品/子系统/事件。我可以看到一些系统组件具有这种结构,例如“Microsoft-Windows-DotNETRuntime/GC/Start”。

我尝试输入 [EventSource(Name = "kafka4net-Connection")],但我不能在 PerfView 中将其用作动态事件,因为我必须枚举我的所有子系统,如“kafka4net-Connection、kafka4net-Fetcher”等.而这是不行的。

EventSource 具有 Name 属性,可以是顶级“产品”,函数名称用作事件名称层次结构中的最低级别。如何在事件名称层次结构中插入中间元素“子系统”?

0 投票
1 回答
2893 浏览

c# - ETW 日志记录 - TraceEventSession 为侦听器启用多个事件提供程序

我正在开发一个 ETW 侦听器来侦听系统中所有可用的事件源。

Q1:请在下面找到示例代码:

此代码适用于一个事件源,即“ETW-TEST-APPLICATION”。我希望此侦听器用于多个事件源“ETW-TEST-APPLICATION2”、“ETW-TEST-APPLICATION3”等。

请让我知道可用于实现这一目标的选项。我尝试使用线程但没有工作。

Q2:另外让我知道我是否可以有多个 session.EnableProvider,我只想启用信息和错误消息,但忽略警告消息 session.EnableProvider(providerGuid,TraceEventLevel.Informal); session.EnableProvider(providerGuid,TraceEventLevel.Error);

0 投票
2 回答
987 浏览

c# - 如何使用 TraceEvent 库捕获进程名称?

我正在使用TraceEvent 库来捕获 ETW 跟踪,但我无法确定导致事件的进程的名称。

这是我到目前为止所拥有的:

当最后的断点被命中时,process"". ProcessID是一个正确的 PID,但这是我可以从日志中的进程中找到的唯一有用信息。

我希望日志捕获进程名称。我做错了什么,还是这个 API 在我的操作系统(Windows 7)上不可用?

0 投票
1 回答
1332 浏览

c# - 使用 ETWTraceEventSource 读取循环 ETW 日志文件

简短版- 为什么 ETWTraceEventSource 为 100mb 循环日志文件返回 0 个日志条目?

长版本- 我修改了一个 IIS 应用程序以使用 ETW 日志记录(使用 nuget 包)。我的事件源如下所示:-

我有一个会话来启用如下所示的提供程序:-

IIS 的东西都工作正常。我被要求编写一个 winforms 应用程序来查看这些日志(用户不喜欢 PerfView)所以我有这个代码:-

用户创建了 10 个这样的日志,并且在他的机器(Windows 8.1)上,其中 8 个在应用程序中完美加载。剩下的 2 个是 100mb,没有显示任何日志条目。如果我在 PerfView 中打开它们,我可以看到文件没有任何问题,并且所有日志条目都在那里。

在我的机器上调试它们(也是 Windows 8.1)我从来没有在“进程日志条目”处点击代码。经过大量试验和错误后,我发现使用 AllEvents 而不是 Dynamic.All 可以:-

我验证了这在我的测试机器(Windows 7)上可以正常工作,但是当我将应用程序传回给用户时,我遇到了完全相同的问题!我还在 Windows 2008 R2 机器 (.net 4.5.2) 和 Windows 7 机器(.net 4.5.1) 上重现了这个。

帮助!!!