【问题标题】:How can you create a folder structure in the Event Log?如何在事件日志中创建文件夹结构?
【发布时间】:2021-07-12 10:05:36
【问题描述】:

我正在尝试使用 C# 在事件查看器中创建文件夹结构。我在应用程序和服务日志下的事件查看器中创建了一个新的日志文件夹,例如MyApp 但我希望这是一个包含多个不同日志文件的文件夹,每个日志文件用于不同的服务应用程序。这在 C# 中可能吗?像这样:

【问题讨论】:

标签: c# event-log


【解决方案1】:

.NET 4 答案

您看到的是来自 Windows 事件跟踪 (ETW) 的通道。您可以在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT查看注册表中的相关项。

要使用这些功能,您必须使用新的 Windows Event Log 功能,它取代了从 Vista 开始的 Event Logging API,看起来它主要针对 C/C++ 开发。似乎其中一些是通过System.Diagnostics.Eventing Namespace 公开的。

我发现 ETW 的一个很好的概述是 Improve Debugging And Performance Tuning With ETW

好消息是,您似乎可以为所欲为。您将需要创建一个 XML 清单,其中包含提供者信息以及将记录的事件。然后,您需要使用清单上的消息编译器(MC.EXE!)来创建头文件、资源文件和日志记录类,然后注册提供程序。

如果您下载Microsoft Windows SDK for Windows 7 and .NET Framework 4,您将在Samples\winbase\Eventing\Provider\Simple\CSharp 子目录中找到一个.NET 示例解决方案,该解决方案将引导您完成所有步骤。

虽然它确实满足您的分层要求并且有点酷,但对于典型的业务线应用程序而言,这在复杂性方面可能有点矫枉过正。此外,消息编译器生成的代码是不安全的代码,因此也可能是负面的。

.NET 4.5 答案

在 .NET 4.5 中,使用 EventSource 类可以更好地支持 ETW。有关介绍,请参阅Windows high speed logging: ETW in C#/.NET using System.Diagnostics.Tracing.EventSource。 EventSource 现在还支持事件日志。有关演练,请参阅 Announcing the EventSource NuGet Package – Write to the Windows Event Log。基本上,在编译时会为每个 EventSource 生成清单和清单 DLL,并且可以使用 wevtutil.exe 注册它们。通过添加 EventSource 和 Event Log 通道支持,这种方法现在看起来很直接且可行。

最后,请注意那些对 ETW 感兴趣的人,模式和实践团队有一个可以使用 ETW 的应用程序块 Semantic Logging Application Block

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多