C# 使用C查询Windows Server 2003上的事件日志#

C# 使用C查询Windows Server 2003上的事件日志#,c#,.net,windows-server-2003,event-log,C#,.net,Windows Server 2003,Event Log,我现在正在构建一个Windows事件日志查看器,我们有很多Windows Server 2003框。我正在使用EventLogReader类进行查询,但它需要Vista+,因此无法在Windows Server 2003上运行。虽然EventLog类可用,但速度非常慢。我还有其他选择吗 更新:我不是在查询所有的事件日志,而是在一个日期范围内查询事件日志,鉴于我们只需要事件日志在一个范围内,有没有办法让查询速度更快?现在使用EventLog类的速度非常慢,即使是对于本地机器,对于远程机器也是无法忍

我现在正在构建一个Windows事件日志查看器,我们有很多Windows Server 2003框。我正在使用EventLogReader类进行查询,但它需要Vista+,因此无法在Windows Server 2003上运行。虽然EventLog类可用,但速度非常慢。我还有其他选择吗


更新:我不是在查询所有的事件日志,而是在一个日期范围内查询事件日志,鉴于我们只需要事件日志在一个范围内,有没有办法让查询速度更快?现在使用EventLog类的速度非常慢,即使是对于本地机器,对于远程机器也是无法忍受的

这是重复的if或与之相关

除了上述链接所提供的信息之外,考虑在日志文件事件翻滚之前限制信息量。

< P>我刚刚玩过。我前面建议的LogParser Studio是这些任务集的UI

下面是一个logparser查询:

logparser.exe -i:EVT “SELECT TimeGenerated,EventID,EventType,EventTypeName,EventCategory,EventCategoryName,SourceName,
Strings,ComputerName,SID,Message FROM \\servername\Application WHERE TimeGenerated > ’2012-07-12 00:00:00′ AND EventType IN (1;2) ORDER BY TimeGenerated DESC” -o:CSV -q:ON -stats:OFF >> c:\temp\Events.csv
用服务器详细信息替换“\servername\Application”

EVT告诉它查询事件日志

这是我使用的快捷方式。

您可以查看我为logparser编写的一个。它有一个类似SQL的创建屏幕,可以为您提供很好的查询示例

如果在应用程序中包含LogParser,请注意如何部署它:,您可以看到我单独包含了它

#1为什么我一直使用EventLog类,因为EventLogReader不是 Win Server 2003上支持

我建议你从我这里借用代码

#2它需要一次查询多个服务器

LogParser非常适合查询多个服务器和多个日志。它非常方便地查看所有日志,并按时间排序,甚至按事件分组

#3我不是在查询所有事件日志,而是在查询事件日志 日志在一个日期范围内,如果我们 只需要将事件日志归入一个范围

是的,我的车开得很快,比超速的火车还快!以下是按日期范围查询Evt日志的方式:

SELECT Extract_FileName(EventLog) AS EventLog, RecordNumber, TimeGenerated, EventID, EventType, EventTypeName, EventCategoryName, SourceName, ComputerName, Message FROM
\\servername\Application
WHERE TimeWritten > '2011-01-25 12:01:00'
AND TimeWritten < '2012-01-25 12:01:00'

EventLog类速度较慢。访问速度取决于事件日志的大小。在大多数服务器场景中,允许它们在归档之前变得相当大。本机Windows事件查看器还支持远程日志查看,这允许您演示远程日志查看的速度有多慢


我认为事件日志的Entries属性很可能是按日期排序的。这意味着您可以实现条目的二进制搜索(Linq在默认情况下不会这样做),以加快速度。这里有一个二进制搜索扩展的例子:

好吧,我承认这两者是相关的,我会重新措辞,让我的问题更清楚一些。除非你正在构建比日志查看器更复杂的东西,不如使用一些现成的工具,比如Log Parser Studio()@SrikanthVenugopalan,我不知道,我们有两个要求,#1,它必须支持Win Server 2003,包括查询和运行,这就是为什么我坚持使用EventLog类,因为Win Server 2003不支持EventLogReader#2,它需要同时查询多个服务器,这两个服务器可以通过Log Parser Studio满足吗?@SrikanthVenugopalan,我尝试过,Log Parser Studio似乎只对日志文件起作用,不在本地系统或远程服务器上。虽然这个工具非常有用,但它不是我们所需要的。但无论如何是thx。正如我发现的,条目集合并不是按时间顺序排列的,而是按日期分组的,日期是按顺序排列的。有了你的提示,我可以提高一个数量级的性能--非常好的答案。但我想做的是以编程方式进行查询,而不是使用某种工具。不过我还是要检查一下。它成功了,谢谢。在旧系统上,现在的性能要好得多
LogParser "SELECT SourceName,TimeGenerated,TimeWritten,Message INTO filename.csv FROM \\Server\Application where Message Like '%mydomain.com%'" -o:CSV