为什么EventLog.GetEventLogs返回的新的自定义事件日志包含应用程序日志条目?

时间:2018-11-01 22:04:26

标签: c# .net windows powershell event-viewer

我有一个非常奇怪的问题,似乎与我正在阅读的有关EventLog.GetEventLogs的任何文档都不对应。

我使用Powershell(一个非常简单的操作)创建了一个新的自定义日志,其中包含零个条目。但是,当我调用EventLog.GetEventLogs并在结果数组中找到新日志时,Entries属性包含所有应用程序日志条目。我期望条目的数量为零,这就是我在事件查看器中看到了。

什么可能导致此结果?

PowerConsole:

> New-EventLog
> Log Name? MyModule
> Souce Name 1? MyModule
> Source Name 2?

C#代码:

var logs = EventLog.GetEventLogs();
var log = logs.FirstOrDefault(l => l.Log == "MyModule");

Response.Write(log.Entries.Count); // Outputs 18,896

2 个答案:

答案 0 :(得分:1)

我认为您可能使用了错误的方法。

获取呼叫自定义日志的参考,而不是调用GetEventLogs,然后然后查看其条目:

EventLog myLog = new EventLog("my_log");           
var count = myLog.Entries.Count;

如果我们然后编写这样的条目:

EventLog myLog = new EventLog("my_log");
myLog.Source = "my_source";
myLog.WriteEntry("A test entry");

计数将按预期增加。

答案 1 :(得分:0)

我找到了解决方案。创建新日志的PowerShell命令最终会修改注册表。我猜想其中某些注册表设置在执行其他命令之前不会应用。重新启动计算机后,EventLog.GetEvenLogs产生了预期的结果。