使用bash解析Java日志中的多行条目

豪努斯

我在Linux机器上加载了大量Java日志,并且试图找到grep表达式或其他内容(perl,awk),该表达式可以在匹配项的整个正文中为我提供整个日志条目。Logstash看起来可以完成任务,但是使用板载工具会更好。

一个例子应该最好。这是具有5个不同条目的示例性日志:

25 Aug 2016 14:00:46,435 DEBUG [User][IP][rsc] An error occurred 
java.Exception: Foo1
 at xyz
25 Aug 2016 14:00:46,436 Foo2 [User][IP][rsc] Some error occured
25 Aug 2016 14:00:46,436 DEBUG [User][IP][rsc] Somethin occured Foo3
25 Aug 2016 14:18:18,224 XYZ [User][IP][rsc] Some problems
More: bla1
More: bla2
USER.bla.bla: Blala::123 - 456
More: Could not open something
 at 567
 at 890
Caused by: Foo4: Could not open another thing
 at 123
 at 456
 ... 127 more
Caused by: gaga
 at a1a2a3
 at b3b3b3
 ... 146 more
25 Aug 2016 14:18:20,118 SSO [User][IP][rsc] Process: error -
Could not Foo5
<here is a blank line>

当我搜索“ Foo1”时,我需要:

25 Aug 2016 14:00:46,435 DEBUG [User][IP][rsc] An error occurred 
java.Exception: Foo1
 at xyz

当我搜索“ Foo2”时:

25 Aug 2016 14:00:46,436 Foo2 [User][IP][rsc] Some error occured

对于“ Foo3”:

25 Aug 2016 14:00:46,436 DEBUG [User][IP][rsc] Somethin occured Foo3

对于“ Foo4”:

25 Aug 2016 01:18:18,224 XYZ [User][IP][rsc] Some problems
More: bla1
More: bla2
USER.bla.bla: Blala::123 - 456
More: Could not open connection
 at 567
 at 890
Caused by: Foo4: Could not open connection
 at 123
 at 456
 ... 127 more
Caused by: gaga
 at a1a2a3
 at b3b3b3
 ... 146 more

最后是“ Foo5”:

25 Aug 2016 01:18:20,118 SSO [User][IP][rsc] Process: error -
Could not Foo5

当我搜索“ Foo”时,应返回所有内容。这样的事情可能吗?也许甚至是一个班轮?我想在Webmin自定义命令模块中使用它,在这里我通过变量提供表达式。

我目前唯一的基本想法是搜索表达式,并使用“ [”作为模式来标识新条目的开始位置。

预先感谢任何有想法的人!

巴基斯坦程序员俱乐部

sed解决方案-适用于不允许awk的环境-相同的sed命令以oneliner和多行形式显示

pat=$1
# oneliner form
#sed -nr '/^[0-9]{2} [a-zA-Z]{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} /!{H; $!b}; x; /'"$pat"'/p; ${g; /^[0-9]{2} [a-zA-Z]{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} /!q; /'"$pat"'/p }'
# multiline form
sed -nr '
/^[0-9]{2} [a-zA-Z]{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} /!{H; $!b}
x
/'"$pat"'/p
${
g
/^[0-9]{2} [a-zA-Z]{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} /!q
/'"$pat"'/p
}'

在行首使用时间戳作为记录开始-累积非时间戳行,即记录空间在保持空间中-在记录开始时交换保持空间和模式空间-在模式匹配时打印记录

记录从最后一行开始的特殊情况-必须从保持空间中重新获取它,并分别测试其模式匹配

patbash变量构造sed命令所需的shell引用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解析具有多行条目的日志文件

来自分类Dev

如何使用logstash过滤器处理多行日志条目?

来自分类Dev

Java日志的logstash多行问题

来自分类Dev

Logstash:如何从较早的日志中保存条目,以便以后在日志中的多行中使用?

来自分类Dev

使用正则表达式解析多行日志条目

来自分类Dev

使用模板引擎解析Java中的多行日志文件

来自分类Dev

流畅不解析JSON日志文件条目

来自分类Dev

在CloudWatch Insights中,如何过滤没有解析值的日志条目?

来自分类Dev

Logstash多行无法正确解析Oracle日志

来自分类Dev

使用Perl在Apache日志中解析时间

来自分类Dev

使用Regex在Python中解析日志文本

来自分类Dev

从日志中过滤多行

来自分类Dev

使用sed选择可能的多行日志条目

来自分类Dev

使用反斜杠转义的kickstart文件中的多行条目

来自分类Dev

解析多行文本bash

来自分类Dev

多行更改日志条目的来源是什么?

来自分类Dev

Cloud Foundry的Logstash和多行日志条目

来自分类Dev

Logstash:将日志文件中的复杂多行JSON解析为ElasticSearch

来自分类Dev

python修复多行日志条目

来自分类Dev

C ++:解析带有拆分的日志,但是一个条目可以包含多行

来自分类Dev

解析日志文件以获取多行中的相关数据

来自分类Dev

ActiveMQ 日志中的条目过多

来自分类Dev

如何使用StreamSets解析日志文件的多行记录?

来自分类Dev

使用 bash 解析唯一 MAC 地址的日志

来自分类Dev

如何在python中解析多行catalina日志-正则表达式

来自分类Dev

Bash 使用 grep 问题解析 mongo 日志

来自分类Dev

如何加速解析 Java 中 zip 文件中的条目

来自分类Dev

跨多行匹配日志条目

来自分类Dev

从日志文件中读取多行日志

Related 相关文章

热门标签

归档