Windows 事件日志的侦听器

Listener for Windows Event log

我可以使用下面的 java JNA 代码来读取 windows 事件日志

EventLogIterator iter = new EventLogIterator("EventLogName");
while(iter.hasNext()) {
    EventLogRecord record = iter.next();
    System.out.println(record.getRecordId()
            + ": Event ID: " + record.getEventId()
            + ", Event Type: " + record.getType()
            + ", Event Source: " + record.getSource());
}

我只想read/capture新活动。

JNA(或任何其他 java 库)中是否有 option/API 来监听 windows 事件日志?

EventLogIterator 有两个构造函数,一个只获取日志名称,the other 允许您指定服务器和标志。

您可以将参数 EVENTLOG_BACKWARDS_READ 标志传递给此构造函数,例如将您的第一行更改为:

new EventLogIterator(null, "EventLogName", WinNT.EVENTLOG_BACKWARDS_READ);

自事件日志记录 ID always increases1,如果您跟踪之前的最高值 getRecordId() 那么您可以在以下时间停止迭代你做到了,只有新活动。

您可以轻松地设置此例程以定期轮询。


1 recordId 是无符号的,并在最大 32 位值处回绕到 0,因此确定 "new" 事件的最佳方法是从中减去先前的 "highest"当前并测试一个正数。