gpt4 book ai didi

java - Stacktrace 感知 grep

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:35 29 4
gpt4 key购买 nike

是否有类似 grep 的 Unix/Linux 命令行工具可以理解由 log4j 或 logback 打印的日志文件中的 Java 堆栈跟踪?该工具应该理解堆栈跟踪由多行组成。

典型的用例是在查看存储到文件的日志时过滤掉某些异常和相应的堆栈跟踪。

最佳答案

我正在使用以下 sed 单行程序:

sed -nr ':main; /^[0-9 :,-]{23} ERROR / { :loop; p; n; /^[0-9 :,-]{23} / b main; b loop}'

第一个 [0-9 :,-]{23} 识别日志记录开始。在它之后,在斜杠之前,您可以编写额外的正则表达式来限制要打印的记录。 {...} 中的表达式循环遍历以下行,直到找到新的记录头。

我的程序适用于日志记录以以下开头的日志:

2015-08-25 12:49:34,906 ...

并打印所有记录开始后出现错误的堆栈跟踪记录。示例:

2015-08-25 12:49:34,906 ERROR [http-8080-89] [Error@112] NullPointerException:
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
...

sed程序解释

The sed program expression /regexp/ command means: if the current line matches the regexp run command.

sed 将读取输入行并运行程序。当该行匹配 /^[0-9 :,-]{23} ERROR/ 时它运行命令 block {...},如果不匹配则程序结束, sed 不会打印当前行输出(选项 -n),然后 sed 读取下一行并再次运行程序。如此重复直到输入结束。

{...} 解释:

  1. p - 打印当前行
  2. n - 阅读下一行
  3. /^[0-9 :,-]{23}/b main - 如果该行与正则表达式匹配,则继续在标签 :main - 有效地重新运行整个在当前行编程而不读取下一行 - 不要错过下一个可能的异常
  4. 在标签 :loop 处继续

所以正则表达式:

  1. /^[0-9 :,-]{23} ERROR/ 匹配开始日志记录的行
  2. /^[0-9 :,-]{23}/ 匹配下一条日志记录的行

关于java - Stacktrace 感知 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284281/

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