c# - 如何仅读取添加到事件日志中的新事件?
问题描述
我正在做一个项目来读取和显示 Windows 事件日志。我使用以下代码从事件日志中读取事件并显示它们。
public static void Main(string[] args)
{
EventLog[] ev;
ev = EventLog.GetEventLogs();
Console.WriteLine("Number of logs on computer: " + ev.Length);
foreach (EventLog log in ev)
{
Console.WriteLine("Log: " + log.Log);
foreach (EventLogEntry entry in log.Entries)
{
Console.WriteLine("Entry: " + entry.Message);
Console.WriteLine("Source: " + entry.Source);
Console.WriteLine("Category: " + entry.Category);
Console.WriteLine("EventID: " + entry.Source);
}
}
}
这段代码工作正常。它显示已存储在日志文件中的所有事件。但在此之后我想要实现的是,我必须阅读即将发生的事件和update them every 10 seconds
.
如果我继续并再次调用相同的函数,我会得到所有的事件,但我只想要新添加的事件。我如何实现这一目标?
TL DR:我只想在事件日志中收听新添加的事件,而不是整个事件日志
解决方案
你可以这样做
EventLog appLogs = new EventLog("Application");
var entries = appLogs.Entries.Cast<EventLogEntry>()
.Where(x => x.TimeWritten >= DateTime.Now.AddMinutes(-60))
.ToList();
但是,您过滤的时间无关紧要,仍然需要相同的时间。
我没有办法加快速度(我知道)
虽然您可能想查看EventLog.EntryWritten 事件
在将条目写入本地计算机上的事件日志时发生。
备注
要获取事件通知,您必须将 EnableRaisingEvents 设置为 true。只有在本地计算机上写入条目时,您才能收到事件通知。您无法接收远程计算机上写入的条目的通知。
EventLog myNewLog = new EventLog("Application", ".", "testEventLogEvent");
myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
myNewLog.EnableRaisingEvents = true;
据推测,这将比尝试轮询 EventLog Plumbing 更轻松
推荐阅读
- python - 即使我确定它已安装,python 3 也无法识别我的库
- ruby-on-rails - 在 Controller 中删除服务器端 cookie 的问题
- java - 在 springboot 中使用 @EnableWebFluxSecurity 时出错
- python-3.x - Python避免嵌套for循环
- model - Anylogic:如何生产各种产品?
- c++ - 调用 'std::vector::push_back(std::string&)' 没有匹配的函数
- javascript - 如何保存报表过滤器并使其可用于执行和调度
- elasticsearch - 仅当 elasticsearch 区分大小写时才获得结果
- javascript - Javascript DOM 制作表格
- javascript - 如何使用数组方法对数组中对象的属性求和