2011-10-09 64 views
8

林使用在Desc命令模式下使用EventLogReader?

EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, queryString); 
    EventLogReader logReader = new EventLogReader(eventsQuery); 

为了读取日志事件。

我需要找到事件编号#xxx没关系

读者从1--->100

开始的最新使用我需要它从100--->1开始,所以我可以得到第一个(满足我的查询)和打破循环。

不想使用中间人DATA BUFFER然后reverse它。

p.s. - 我的日志文件大约是400 MB。 (win7)。

回答

10

您可以使用ReverseDirection财产上的EventLogQuery类:

EventLogQuery eventsQuery = new EventLogQuery("Security", PathType.LogName, queryString); 
eventsQuery.ReverseDirection = true; 

EventLogReader logReader = new EventLogReader(eventsQuery); 

希望,这会有所帮助。

+0

你是男人....... –

+0

它是用C# –

+0

@Royi纳米尔来读取事件日志的最后一个事件的最快方法:这是最快的方法?这取决于您正在编程的应用程序的类型。如果您的应用程序一直在运行,那么您可以订阅特定事件而不是重复查询事件日志。 – Hans

0

只是供参考,如果你只是想从事件查看器的最后XX事件,你不必使用EventLogReader。我不想使用ELR,因为它仅限于Vista/Windows2008/Win7。要在.NET中使用oldschool EventLog对象执行此操作,只需在“条目”对象上使用索引器即可。例如下面的代码片段:

 EventLog log = new EventLog("Application"); 
     for (int counter = 1; counter <= sizeToGet; counter++) 
     { 
      string msg = log.Entries[log.Entries.Count - counter].Message; 

      Console.WriteLine(msg) 
     }