我编写了一个C#程序,它连接到远程主机并读取Windows事件日志。
System.Diagnostics.EventLog eventLog = new System.Diagnostics.EventLog();
eventLog.Log = "Application";
eventLog.MachineName = "remoteMachineName";
if (EventLog.Exists(eventLog.Log, eventLog.MachineName))
{
foreach (EventLogEntry entry in eventLog.Entries)
{
Console.WriteLine(entry.Message);
}
}
但是,由于事件数量非常大,当我运行此代码时,需要一些时间才能获取eventLog.Entries
。
更新:是否有办法在特定时间(例如,自过去1小时后创建的日志)中读取日志而不是读取所有日志?我的计划是阅读自过去1小时以来创建的所有日志和更新的过滤日志,但这可能不是解决方案。
答案 0 :(得分:0)
简短的回答是否定的。 EventLog
类无法将最后x
条目或条目超过y
日期或其他任何内容。此外,您不允许远程接收EventWritten
事件,这对我来说只是一个简单但远非理想的工作,可以限制日志大小。如果您一直在提取日志,那么无论如何您都不需要将其用于存档目的,但是如果您限制它的时间/大小,您将永远不会读取那么多数据,因此您的应用会保持快速。
正如其他一些人在评论中所建议的那样,唯一合理的选择是构建一些中间层,通过HTTP或其他东西向中央服务器发送EventWritten
事件。