2012-02-01 58 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