快速搜索日志

4
我有一个和另一篇帖子中描述的人有相同的问题。我的应用程序日志文件非常大(~1GB),使用grep命令从日志文件中获取信息非常繁琐。目前我使用“less”工具,但它也比我想象中慢。
我正在考虑加速搜索。以下是几种方法:首先,生成XML格式的日志并使用一些XML搜索工具。我不确定使用XML搜索会获得多少加速(我猜不会太多,因为非索引文件搜索仍然需要很长时间)。
其次,使用XML数据库。这将更好,但我在这方面没有太多背景知识。
第三,使用(非XML)数据库。这将有点繁琐,因为必须编写表模式(对于上述第二个选项,是否也必须这样做?)。我预见在开始时模式会经常变化以包含常见用例。理想情况下,我希望能找到比完整数据库更轻量级的存储日志的方法。
第四,使用Lucene。它似乎适合此用途,但是否有一种简单的方法来指定当前用例的索引?例如,我想说“每当你看到单词'iteration'时进行索引”。
你的意见是什么?
5个回答

9

问题在于使用XML会使您的日志文件变得更大。我建议按日期或行数拆分日志文件,否则可以使用基于文件的数据库引擎,例如SQLite


6
一千兆字节并不是非常大。您正在尝试使用这些日志文件做什么“相关性”分析?我经常发现编写一个定制程序(或脚本)以特定方式处理日志文件比尝试设计数据库模式来处理您将来想要执行的所有操作更简单。当然,如果由于某种原因您的日志文件难以解析,那么修复该方面可能是值得尝试的。
(顺便说一下,我同意kuoson的观点 - XML几乎肯定不是正确的选择。)

关于相关性:AI应用程序使用基于随机位的启发式算法。我经常需要找出某种变化发生的原因以及为什么。然后我会着手纠正/改进这个原因。 - amit kumar
Jon,关于将一些日志详细信息保存在数据库中并引用日志文件来获取其余数据的想法,这样做是否是一个好习惯?我还需要一个可以查询的日志,但我考虑使用LINQ或者像你建议的那样直接通过代码实现。 - ilans
@ilanS:我不确定你的意思。你可以在数据库中有一个日志“索引”,例如,“X机在Z时间产生了Y日志”-或者你可以从目录结构中直接看出这一点。 - Jon Skeet

1
在处理日志文件时的麻烦之处在于每个文件都必须单独查询,如果您能创建日志文件的索引并搜索/查询它,您将获得更快速的响应。我的下一个选择是Lucene,然后是Solr。

1

如果你可以在Windows上检查日志,或者使用Wine,LogParser是一个很好的工具,可以从日志中挖掘数据,它实际上允许你在任何日志上运行SQL查询,而无需更改任何代码或日志格式,并且甚至可以用来生成快速的HTML或Excel报告。

几年前,当XML很流行时,我使用XML日志和XSLT样式表来产生视图,这实际上很不错,但它使用了太多的内存,并且在处理大文件时会出现问题,所以你可能不想使用XML。


我看到了MS Log Parser。如果它是开源的/在Linux上可用(即不需要Wine),那就太理想了。 - amit kumar
我同意,我希望它是开源的,但不幸的是它不是,无论如何,考虑到它能做什么,Wine实际上可能是可行的,至少在我的情况下是这样。 - Robert Gould
你在wine下成功运行LogParser.exe了吗? - MattH

0

如果您的内存足够大,也许可以将日志加载到 Emacs 中,并使用各种 Emacs 功能,如增量搜索和 Alt-X occur。

免责声明:我尚未尝试过在文件 > 100MB 上进行此操作。


我使用vim来编辑,但是我需要等待大约一分钟左右才能打开文件。 - amit kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接