代码之家  ›  专栏  ›  技术社区  ›  Greg Olmstead

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

  •  2
  • Greg Olmstead  · 技术社区  · 15 年前

    我编写了一个应用程序,通过Zenoss WMI客户端包从Linux收集Windows日志。

    它使用wql查询事件日志并解析返回。我的问题是试图在日志中找到最新的条目。

    我偶然发现 this 它告诉我在这样的查询中使用NumberOfRecords列

    Select NumberOfRecords from Win32_NTEventLogFile Where LogFileName = 'Application'
    

    并将其返回值用作最高日志。

    我的问题是,我听说Windows事件日志是一个循环缓冲区,即当日志满时,它会用新日志覆盖最旧的日志。这会对记录的数量产生影响吗?如果发生这种情况,事件的“recordnumber”属性将继续增加,但是事件日志中的实际记录数量不会改变(对于写入的每个条目,都会删除一个记录)。

    是否有人能洞察这是如何实际工作的(无论numberofrecords是最高的recordnumber,还是日志中的实际事件数),并提出解决方案?

    更新

    所以我们现在知道numberofrecords不能单独工作,因为事件日志是一个环缓冲区。MS解决方案是获取最旧的记录并将其添加到NumberOfRecords中,以获取实际的最新记录。

    这可以通过winapi实现,但我从Linux远程调用。有人知道我如何在我的场景中实现这一点吗?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mitch    15 年前

        2
  •  0
  •   slasla    11 年前

    SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application'
    

    SELECT NumberOfRecords FROM Win32_NTEventlogFile WHERE LogfileName='Application'
    

    SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application' AND RecordNumber>='_number_of_records_'
    

    推荐文章