4

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

更新:我不是在查询所有的事件日志,而是在一个日期范围内查询事件日志,有没有办法让它更快,因为我们只需要事件日志属于一个范围?现在使用 EventLog 类即使对于本地盒子也非常慢,对于远程盒子来说是无法忍受的。

4

4 回答 4

2

我刚刚玩了一下 logparser。我之前建议的 Log Parser Studio 是用于这些任务集的 UI。

这是一个日志解析器查询:

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”替换为您的服务器详细信息。

-i:EVT 告诉它查询事件日志。

这是我使用的快速LogParser 参考

于 2013-01-11T01:27:53.153 回答
2

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

我认为 EventLog 的 Entries 属性很可能是按日期排序的。这意味着您可以实现条目的二进制搜索(Linq 默认情况下不这样做)以加快速度。下面是一个二进制搜索扩展的示例:LINQ 可以在对集合进行排序时使用二进制搜索吗?

于 2013-01-11T02:05:47.373 回答
1

如果或与哪种方法在 C# 中读取 Windows 事件日志更好?WMI 或事件日志

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

于 2013-01-07T00:37:16.757 回答
1

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

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

#1 为什么我坚持使用 EventLog 类,因为 Win Server 2003 不支持 EventLogReader

我建议你从Visual Log Parser借用代码。

#2 它需要同时查询多个服务器

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

#3 我不是在查询所有的事件日志,而是在一个日期范围内查询事件日志,有没有办法让它更快,因为我们只需要一个范围内的事件日志?

是的,LogParser 完全在飞行中,比疾驰的火车还快!以下是按 DateRange 查询 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'

#4 我试过了,Log Parser Studio 似乎只适用于日志文件,而不适用于本地系统或远程服务器。

Log Parser Studio 只是 logparser 的 GUI,它应该可以工作,尝试这个原始查询(没有 LP Studio 直接使用 LogParser)来获取您域中的所有日志:

LogParser "SELECT SourceName,TimeGenerated,TimeWritten,Message INTO filename.csv FROM \\Server\Application where Message Like '%mydomain.com%'" -o:CSV
于 2013-01-11T02:01:42.077 回答