使用层次结构写入事件日志

时间:2014-08-29 07:40:58

标签: c# event-log event-viewer

我知道有很多关于在SO上写入事件查看器的主题,但我找不到我需要的内容。

我有以下代码在事件查看器中创建新的事件日志类别:

string sSource = "MyWebService";
string sLog = "My Application";
string sMsg = "Error Message Goes here";

if (!EventLog.SourceExists(sSource))
{ EventLog.CreateEventSource(sSource, sLog); }

这可以按预期工作,在事件查看器中,我有以下输出:

enter image description here

因此,当我想在日志中创建一些层次结构时,写入事件查看器不是问题,但问题发生

所以,我们假设我已经编写了一个由各种组件组成的应用程序:

- MVC
- Web API
- Windows Service

然后在事件查看器中,我想创建一个包含所有这些元素的字典,就像Microft一样:

enter image description here

这意味着我希望输出看起来像:

- Application (directory)
    - MVC (directory)
        - Others (logs)
    - Web API (directory)
        - Demo (logs)
    - Windows Service (directory)
        - Authentication (logs)

我试图做以下事情:

string sSource = "MyWebService";
string sLog = "My Application";
string sMsg = "Error Message Goes here";

if (!EventLog.SourceExists(sSource))
{ EventLog.CreateEventSource(sSource, sLog); }

if (!EventLog.SourceExists(sLog))
{ EventLog.CreateEventSource(sLog, "Web Service"); }

但当然,这没有用。

任何人都知道如何在事件查看器中创建层次结构?

重要的是说:我希望完全控制我的代码,因此我不想使用任何第三方库。

1 个答案:

答案 0 :(得分:0)

要执行您想要的操作,您需要使用Windows事件跟踪(ETW)。在.NET中,您可以使用EventSource类,但我建议您使用更新的NuGet包:Microsoft EventSource Library。还有一个带有样本的NuGet包,如果您是ETW的新手,应该提供一个很好的起点。

除了创建写入事件日志的代码之外,还需要创建清单和关联的资源DLL。 NuGet包有一个工具,可以根据您在代码中创建的日志事件自动执行此过程。然后,您需要使用wevtutil命令行工具注册事件源。