.NET 4 答案
您看到的似乎是来自 Windows 事件跟踪 (ETW) 的通道。您可以在注册表中查看相关项目HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT
.
要使用这些功能,您必须使用新的Windows 事件日志 http://msdn.microsoft.com/en-us/library/windows/desktop/aa385780%28v=vs.85%29.aspx取代的功能事件记录 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363652%28v=vs.85%29.aspxAPI从Vista开始,看起来主要是针对C/C++开发的。看来其中一些内容是通过System.Diagnostics.Eventing 命名空间 http://msdn.microsoft.com/en-us/library/system.diagnostics.eventing.aspx.
我发现 ETW 的一个很好的概述是使用 ETW 改进调试和性能调整 http://msdn.microsoft.com/en-us/magazine/cc163437.aspx.
好消息是,您似乎可以做您想做的事。您将需要创建一个 XML 清单,其中包含提供程序信息以及将记录的事件。然后,您需要使用清单上的消息编译器(MC.EXE!)来创建标头、资源文件和日志记录类,然后注册提供程序。
如果你下载适用于 Windows 7 和 .NET Framework 4 的 Microsoft Windows SDK http://www.microsoft.com/en-us/download/details.aspx?id=8279你会发现在Samples\winbase\Eventing\Provider\Simple\CSharp
子目录中包含一个 .NET 示例解决方案,它将引导您完成所有步骤。
虽然它确实满足您的层次结构要求并且有点酷,但对于典型的业务应用程序来说,这在复杂性方面可能有点过大了。此外,消息编译器生成的代码是不安全的代码,因此这也可能是负面的。
.NET 4.5 答案
在 .NET 4.5 中,使用 EventSource 类对 ETW 提供了更好的支持。看Windows 高速日志记录:使用 System.Diagnostics.Tracing.EventSource 在 C#/.NET 中进行 ETW https://web.archive.org/web/20190112075125/https://blogs.msdn.microsoft.com/vancem/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource/进行介绍。 EventSource 现在还支持事件日志。看宣布推出 EventSource NuGet 包 – 写入 Windows 事件日志 https://web.archive.org/web/20150623021720/http://blogs.msdn.com/b/dotnet/archive/2013/08/09/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx进行演练。基本上,在编译时会为每个 EventSource 生成清单和清单 DLL,并且可以使用 wevtutil.exe 注册它们。通过添加 EventSource 和事件日志通道支持,这种方法现在看起来简单且可行。
最后,对 ETW 感兴趣的人请注意,模式和实践团队有一个应用程序块语义记录应用程序块 http://blogs.msdn.com/b/agile/archive/2013/04/25/just-released-microsoft-enterprise-library-6.aspx可以使用ETW。