有时我需要挖掘巨大的日志文件(解压后有几个 GB)来调试特定的错误。
现在,vim 可以浏览文件,但是当我需要在文件中查找某些内容时,它完全没用。是否有某种工具可以索引日志并允许我更快地搜索文件?
最好是命令行工具。
编辑:只是为了澄清,像ack
或 之类的工具grep
不合适,因为我需要检查匹配的上下文,并且-C
, -A
,-B
只是不够好。另外ack
和grep
仍然慢得无法使用。
答案1
有一些非常好的日志索引器,它们比命令行工具级别要大一些。商业上,斯普伦克是个大的,很难被击败。格雷日志2是一个很好的开源实现。 Elasticsearch+Logstash 也相当不错。
设置它们来收集和运行收集服务器都会产生相当大的开销,但是一旦您将中央日志收集作为系统的一部分,它们就很棒了。从多个来源查询和报告日志是多层应用程序的最大好处。
至于命令行,如果您可以将日志记录插入 syslog,系统 日志实现允许在 a 上建立索引字段数当项目被记录时。不确定这在文本处理中是否有用,但对于元数据来说更有用。
不确定是否有任何临时命令行工具,每次加载文件时它们仍然会产生提取/加载/解析时间损失。
话虽如此,less
我在单个日志文件中完成了大部分需要的工作。
&pattern grep pattern
/pattern search forward
?pattern search backward
shift-f tail -f
该tail
模式也可以考虑之前的模式,这对于观看实时日志非常有用
答案2
搜索文件less
可能是一种选择。它不需要文件适合内存。而且它比 vim 快得多(即使使用 LargeFile 插件)。
缺点是:grep
从性能的角度来看,它可能不会被击败。如果文件大小接近 RAM 大小,大多数替代方案都会出现问题。