我有一个非常奇怪的问题,似乎与我正在阅读的有关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
答案 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产生了预期的结果。