使用WQL可靠地获得最新事件日志记录

我编写了一个应用程序,通过Zenoss wmi-client软件包从linux收集windows日志。 它使用WQL查询事件日志并解析返回。我的问题是试图找到日志中的最新条目。 我偶然发现了这个,它告诉我在这样的查询中使用NumberOfRecords列
Select NumberOfRecords from Win32_NTEventLogFile Where LogFileName = 'Application'
并使用其中的返回值作为最高日志。 我的问题是,我听说Windows事件日志是一个循环缓冲区,它会在日志变满时用新的日志覆盖它最旧的日志。这会对NumberOfRecords产生影响,就好像发生这种情况一样,事件的“RecordNumber”属性将继续增加,但事件日志中的实际记录数不会改变(对于每个写入的条目,一个被删除) )。 任何人都可以了解这实际上是如何工作的(无论NumberOfRecords是最高的RecordNumber,还是日志中的实际事件数),或许可以提出一个解决方案? 更新 所以我们现在知道NumberOfRecords不能自行运行,因为事件日志是一个环形缓冲区。 MS解决方案是获取最早的记录并将其添加到NumberOfRecords以获取实际的最新记录。 这可以通过WinAPI实现,但我是从Linux远程调用的。有谁知道我在我的场景中如何实现这一目标? 谢谢     
已邀请:
NumberOfRecords并不总是最大记录号,因为日志是循环的,日志可以清除,你可以有一个条目,但它的记录号是1000。 使用win api执行此操作的方法是获取最早的记录编号,并在日志中添加记录数以获取最大记录编号。它看起来不像Win32_NTEventLogFile有一个最旧的记录号字段要使用。 您是否每次查询日志时都尝试获取最新记录?查询Win32_NTLogEvent以获取所有内容> NOW时,可以使用TimeGenerated。您可以迭代该列表以查找最大记录编号。     
你需要最新记录的RecordNumber,但没有快速的方法来获得它。 通常,您必须:
SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application'
并通过结果找到最大RecordNumber。但是如果日志文件的大小很大,这可能需要几十秒或几分钟...它非常慢。 但! 您可以获得多少记录:
SELECT NumberOfRecords FROM Win32_NTEventlogFile WHERE LogfileName='Application'
这非常快。然后减少选择以加速搜索最新记录:
SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application' AND RecordNumber>='_number_of_records_'
这个< =的执行时间比一般情况要好。     

要回复问题请先登录注册