java - 如何使用 grep 从日志文件捕获 Java 异常,包括堆栈跟踪?

标签 java unix exception grep stack-trace

总结

我正在尝试使用 grep 命令从日志文件中获取日志。但是,我可以匹配时间戳,但没有得到我需要的完整堆栈跟踪。

日志文件示例

[1/10/16 23:55:33:018 PST] 00000057 ServerObj E   SECJ0373E: Exception message
at com.own.ws.wim.util.UniqueNameHelper.formatUniqueName(UniqueNameHelper.java:102)
at com.own.ws.wim.ProfileManager.getImpl(ProfileManager.java:1569)

我尝试过的

我能够获取日志条目,但我也想要堆栈跟踪。我试过:

$ grep -i '^[[:space:]]*at' --before-context=2 SystemOut.log |
    grep "1/13/16 7:[1-60]" 
[1/10/16 23:55:33:018 PST] 00000057 ServerObj E   SECJ0373E: Exception message

知道如何实现吗?

最佳答案

(来 self 的回答:https://stackoverflow.com/a/16064081/430128)

这是一个快速而复杂的 grep 表达式...如果您使用的是 log4j 之类的记录器,则异常的第一行通常包含 WARNERROR , 下一行将包含异常名称和可选的消息,然后后续堆栈跟踪将以下列之一开始:

  1. "\tat" (制表符 + at )
  2. "Caused by: "
  3. "\t... <some number> more" (这些行指示堆栈中未显示在“由”异常中显示的帧数)
  4. 堆栈前的异常名称(可能还有消息)

我们要获取上面所有的行,所以grep表达式为:

grep -P "(WARN|ERROR|^\tat |Exception|^Caused by: |\t... \d+ more)"

它假设异常类总是包含单词 Exception这可能是真的,也可能不是真的,但这毕竟是快速而肮脏的。

根据您的具体情况进行必要的调整。

关于java - 如何使用 grep 从日志文件捕获 Java 异常,包括堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34788252/

相关文章:

java - 使用 JDBC 连接到云中托管的 MongoDB 时出错

在 for 循环中 fork

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - EJB3 Mybatis和CMT的例子

java - 无论操作系统如何创建文件和文件夹

php - 从 CronJob 启动时,Unix .sh 文件工作不正确

linux - printf linux 问题 - lsusb 返回值返回一个长字符串

c# - 如何处理 NullReference 异常 C#

c++ - 是否可以抛出 C++ 标准库中定义的异常?

java - 从 Mathematica 调用 java 项目