gpt4 book ai didi

java - 如何使用 grep 命令从日志文件中捕获相关 ID 以及 java stacktrace 和多行消息

转载 作者:行者123 更新时间:2023-11-30 10:02:36 26 4
gpt4 key购买 nike

在日志文件中,每个发送的请求都会自动分配一个唯一的关联 ID,例如日志示例中的 X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaX-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb低于由 log4j 创建的。

2019-06-03 11:27:22,697|X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|INFO |com.example.ExampleService|Start execute
2019-06-03 11:27:22,697|X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|INFO |com.example.ExampleService|ENTRY| performIntegration()
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| executeService()
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| MyObject = This,
is
a
multiline log
message
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|ERROR|com.example.ExampleAdapter|error
com.example.ABCRuntimeException: Network error
at ...
at ...
Caused by: ...
at ...
at ...
2019-06-03 11:27:22,698|X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|INFO |com.example.ExampleService|EXIT| performIntegration()
2019-06-03 11:27:22,699|X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|INFO |com.example.ExampleService|EXIT| executeService()
2019-06-03 11:27:22,699|X-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|ERROR|com.example.ExampleAdapter| another error
com.example.ABCRuntimeException: Network error
at ...
at ...
Caused by: ...
at ...
at ...

如何将关联 ID 与多行消息和 Java 堆栈跟踪一起进行 grep?例如我想 grep X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,那么预期的输出应该如下所示

2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| executeService()
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| MyObject = This,
is
a
multiline log
message
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|ERROR|com.example.ExampleAdapter|error
com.example.ABCRuntimeException: Network error
at ...
at ...
Caused by: ...
at ...
at ...

linux grep 命令可以实现吗?或者有没有其他推荐的工具?但是,我不允许在生产服务器上安装新包。操作系统为Red Hat 7。

最佳答案

尝试:

$ awk -F\| -v id='X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' '/^[0-9]{4}-[0-9]{2}-[0-9]{2} /{f=0} $2==id{f=1} f' file
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| executeService()
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|INFO |com.example.ExampleService|EXIT| MyObject = This,
is
a
multiline log
message
2019-06-03 11:27:20,759|X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb|ERROR|com.example.ExampleAdapter|error
com.example.ABCRuntimeException: Network error
at ...
at ...
Caused by: ...
at ...
at ...

工作原理

  • -F\|

    使用|作为字段分隔符。

  • -v id='X-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'

    创建一个名为 id 的 awk 变量并为其分配感兴趣的 id。

  • /^[0-9]{4}-[0-9]{2}-[0-9]{2}/{f=0}

    如果当前行以日期开头,则将变量 f 设置为 false(零)。

  • $2==id{f=1}

    如果第二个字段与所需的 id 匹配,则将变量 f 设置为 true(一)。

  • f

    如果 f 为真,打印该行。

关于java - 如何使用 grep 命令从日志文件中捕获相关 ID 以及 java stacktrace 和多行消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com