2012-02-01 64 views
0

我是Unix grep的新手,我希望能够提供一些grep命令。用于Java日志的Unix grep

目前,我有以下类型的误差在我的申请日志:

2012年2月31日10:21:41333 ERROR [65](GeneralAppliancesBean.java:135) - 异常的java。 net.ConnectException:连接超时

2012-01-31 10:24:41843 ERROR [41](FlightStatusBean.java:135) - 异常java.net.SocketTimeoutException:连接超时

2011- 01-31 10:22:41,841错误[1](FlightCancellation.java:135) - 异常java.rmi.ConnectException:连接超时

2011-01-31 10:22:41841 ERROR [1](OrderBean.java:132) - 异常java.rmi.ConnectException:连接超时

我想知道时间戳(例如2012-02-31 10:21:41,333),Java类和行为负责(例如GeneralAppliancesBean.java:132)此例外。

我该如何构建这个grep命令?

+0

这个问题真的属于超级用户...没有涉及的编程。 – 2012-02-01 02:45:58

+0

我认为这属于serverfault。也应该这样做与awk,而不是grep。 – 2012-02-01 03:09:26

回答

1
[email protected] ~ $ echo '2012-02-31 10:21:41,333 ERROR [65] (GeneralAppliancesBean.java:135) - Exception java.net.ConnectException: Connection timed oot' | cut -d "," -f 1 
2012-02-31 10:21:41 
[email protected] ~ $ echo '2012-02-31 10:21:41,333 ERROR [65] (GeneralAppliancesBean.java:135) - Exception java.net.ConnectException: Connection timed oot' | cut -d " " -f 5 
(GeneralAppliancesBean.java:135) 
[email protected] ~ 

cut更适合于此。

如果您的日志位于文件命名日志中,请使用此命令。

while read myline 
    do 
     echo "Date: "$(echo $myline | cut -d "," -f 1) 
     echo "Error: "$(echo $myline | cut -d " " -f 5) 
    done < logs 

如果错误多(其中我对持怀疑态度):日期& grep "ERROR" logs | cut -d " " -f 4类和行号

使用grep "ERROR" logs | cut -d "," -f 1

+0

如果我把它放到一个grep语句中,它看起来像这样:grep -rn“ConnectionException | SocketTimeoutException”* | cut -d“,”-f 1 cut -d“”-f 5? – 2012-02-01 02:26:10

+0

@ChinBoon你确定,你的错误是多行的,或者它只是终端宽度把一些文本放在下一行? – 2012-02-01 02:33:33

+0

@Ahihijeet Rastogi是的,错误是多行的。 – 2012-02-01 02:55:26

1
grep ERROR java.log|awk '{print $1 $4}' 
+3

NOOOO不是grep + awk!只要做awk'/错误/ {打印$ 1 $ 4}' – 2012-02-01 03:08:47

+1

我同意awk比grep更适合你所描述的内容。一个注意事项 - 由于日期/时间戳实际上是2个字段(尤其是awk看到它),所以打印需要为'{print $ 1 $ 2 $ 5}' – Randall 2012-02-01 03:16:09

+0

LOL。我的错。习惯的力量。自从我找到perl以来从未进入awk。 – jloper3 2012-02-01 19:09:04