Evs*_*paa 2 c# arrays event-log
我想知道如何才能达到事件日志条目.我有一个客户端服务器应用程序,它执行没有问题.我正在寻找的是id为1149的所有日志实例.这个日志是远程连接条目.我已经拿了一段代码,就在这里.
string logType = "System";
string str = "";
EventLog ev = new EventLog(logType, System.Environment.MachineName);
int LastLogToShow = ev.Entries.Count;
if (LastLogToShow <= 0)
Console.WriteLine("No Event Logs in the Log :" + logType);
// Read the last 2 records in the specified log.
int i;
for (i = ev.Entries.Count; i >= LastLogToShow - 1000 ; i--)
{
EventLogEntry CurrentEntry = ev.Entries[i];
if (CurrentEntry.InstanceId == 1149)
{
str += "Event type: " + CurrentEntry.EntryType.ToString() + "\n" +
"Event Message: " + CurrentEntry.Message + CurrentEntry + "\n" +
"Event Time: " + CurrentEntry.TimeGenerated.ToShortTimeString() + "\n" +
"Event : " + CurrentEntry.UserName +"\n" +"\n";
}
}
ev.Close();
return str;
Run Code Online (Sandbox Code Playgroud)
问题是我每次都得到42567索引超出界限.我也不知道在那之后它是否会起作用,所以可能会出现问题.
编辑:事实上,问题是我和我的索引一样伸出了事件日志,就像你们说的那样.在循环中使用这一行解决了我的问题,我现在能够访问事件日志,如果有人在四处寻找,这个解决方案对我有用,所以非常感谢你们.
for (i = ev.Entries.Count - 1; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)
这for (i = ev.Entries.Count; i >= LastLogToShow - 1000 ; i--)会导致您的错误.我真的没有得到你想要做的事情.例如,如果您的参赛作品少于1000个,i则可以为负数.当您使用负值作为数组的索引时,您将获得"索引超出范围的异常".当您尝试仅处理最后2条记录时(正如for循环建议上方的注释),您应该只使用它:
for (i = ev.Entries.Count - 1; i >= ev.Entries.Count - 2; i--)
Run Code Online (Sandbox Code Playgroud)
当然,您仍然需要检查是否有超过2个条目,因为如果有0个条目,代码仍将进入for循环并尝试访问具有负索引的数组:
if(ev.Entries.Count < 2)
return str;
for (i = ev.Entries.Count - 1; i >= ev.Entries.Count - 2; i--)
Run Code Online (Sandbox Code Playgroud)
编辑:即使有超过1000条记录,当你第一次进入for循环时,也会注意到ev.Entries[ev.Entries.Count].由于数组索引从零开始,因此必须从计数中减去1才能获得数组的最后一个元素.