我知道有很多关于在SO上写入事件查看器的主题,但我找不到我需要的内容。
我有以下代码在事件查看器中创建新的事件日志类别:
string sSource = "MyWebService";
string sLog = "My Application";
string sMsg = "Error Message Goes here";
if (!EventLog.SourceExists(sSource))
{ EventLog.CreateEventSource(sSource, sLog); }
这可以按预期工作,在事件查看器中,我有以下输出:
因此,当我想在日志中创建一些层次结构时,写入事件查看器不是问题,但问题发生。
所以,我们假设我已经编写了一个由各种组件组成的应用程序:
- MVC
- Web API
- Windows Service
然后在事件查看器中,我想创建一个包含所有这些元素的字典,就像Microft一样:
这意味着我希望输出看起来像:
- 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"); }
但当然,这没有用。
任何人都知道如何在事件查看器中创建层次结构?
重要的是说:我希望完全控制我的代码,因此我不想使用任何第三方库。
答案 0 :(得分:0)
要执行您想要的操作,您需要使用Windows事件跟踪(ETW)。在.NET中,您可以使用EventSource类,但我建议您使用更新的NuGet包:Microsoft EventSource Library。还有一个带有样本的NuGet包,如果您是ETW的新手,应该提供一个很好的起点。
除了创建写入事件日志的代码之外,还需要创建清单和关联的资源DLL。 NuGet包有一个工具,可以根据您在代码中创建的日志事件自动执行此过程。然后,您需要使用wevtutil命令行工具注册事件源。