使用 grep 从日志文件中获取日志

使用 grep 从日志文件中获取日志

我正在尝试使用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]" 

output : [1/10/16 23:55:33:018 PST] 00000057 ServerObj E   SECJ0373E: Exception message

知道如何实现这一点吗?

答案1

带有字段分隔符“at”的 awk 也可以工作。 “^[”匹配以日期戳开头的行,$1 是第一个字段。

awk -F"at" '/^\[/{print $1}' test

根据您的评论,如果我正确理解您的需要,awk 命令应该包含您正在查找的行,并且 grep 范围在 7 点到 8 点之间。

但是,听起来您需要两个列表。为此,您可以在日志文件上运行 awk 命令并将其输出到另一个文件。然后您可以 awk/grep 第二个文件。

awk -F"at" '/^\[/{print $1}' test>> ExtractedLogs.txt
awk -F"at" '$1 ~ "07:"{print $1}' ExtractedLogs.txt>> StackTraceOnly.txt

答案2

您可以添加 --after-context=2,在找到“at”行后将其他行添加回来:

grep -i '^[[:space:]]*at' --before-context=2 afile | grep --after-context=2 "1/13/16 7:[1-60]"

相关内容