从日志文件中提取 Java 堆栈跟踪的工具 [已关闭]

2022-09-01 20:30:09

是否有任何工具可以提取日志文件中出现的堆栈跟踪列表,并可能计算唯一的堆栈跟踪?

编辑:我会预先考虑一些不基于GUI的东西,并在后台运行并返回某种报告。我从多个环境中收集了相当多的日志,只是想快速了解一下。


答案 1

这是一个快速而肮脏的grep表达...如果您使用的是记录器,例如log4j,则异常的第一行通常将包含或,下一行将包含异常名称,并选择性地包含一条消息,然后后续的堆栈跟踪将以下列之一开始:WARNERROR

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

我们想要获取上述所有行,因此 grep 表达式为:

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

它假设 Exception 类始终包含可能为真或可能不真实的单词,但这毕竟是快速而肮脏的。Exception

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


答案 2

你可以很容易地自己写这个。模式如下:

  1. 打开文件
  2. 搜索字符串(即新行、制表符、、空白)这是堆栈跟踪之外非常罕见的字符串。"\n\tat "at

现在,您需要做的就是找到第一行,而不是开头的行来查找堆栈跟踪的末尾。之后,您可能希望跳过 1-3 行以捕获链接的异常。\t

另外,在堆栈跟踪的第一行之前添加几行(例如 10 或 50)以获取一些上下文。


推荐