用于Java日志的Unix grep

时间:2012-02-01 02:18:00

标签: java grep

我是Unix grep的新手,我想要一些帮助来提出一个grep命令。

目前,我的应用程序日志中存在以下类型的错误:

  

2012-02-31 10:21:41,333错误[65](GeneralAppliancesBean.java:135) -   异常java.net.ConnectException:连接超时

     

2012-01-31 10:24:41,843错误[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:41,841 ERROR [1](OrderBean.java:132) -   异常java.rmi.ConnectException:连接超时

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

我如何构建这个grep命令?

3 个答案:

答案 0 :(得分:1)

shadyabhi@archlinux ~ $ 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
shadyabhi@archlinux ~ $ 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)
shadyabhi@archlinux ~ 

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 1作为日期&amp;课程和行号grep "ERROR" logs | cut -d " " -f 4

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以定义一个别名同时搜索多个关键字,例如

alias finderrors="grep -i -w 'fatal\|error\|exception\|timeout\|waiting\|fail\|unable\|lock\|block'"

然后这样使用

finderrors mylogfile.log