解析异常

时间:2011-12-16 12:13:08

标签: java

我在日志文件中有以下日志条目:

  2011-12-16 17:10:05,353 [http-8080-2] ERROR   Log4JErrorServlet - error message
    java.lang.NullPointerException
        at test.Log4JErrorServlet.doGet(Log4JErrorServlet.java:27)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Unknown Source)

2011-12-16 17:10:05,354 [http-8080-2] FATAL   Log4JErrorServlet - fatal message

我只想解析异常而不解析其他任何事情。我可以这样做,可能是通过正则表达式或String方法。

2 个答案:

答案 0 :(得分:2)

0不完全确定正则表达式,但它会是这样的: 它处理换行后跟空格属于日志条目。

            Pattern pattern = Pattern.compile("(?s)\n\\d.*ERROR(\n |.)*");
            Matcher m = tmpPat.matcher(logContent);
            StringBuilder buf = new StringBuilder();
            while (m.find()) {
                String exc = m.group();
                buf.append(exc);
            }

答案 1 :(得分:1)

我使用awk来解析日志文件。这将完成工作

awk '/java.lang.*Exception/ {
 print $0;
 getline;
 print $0;
 while (substr($1,5,1) != "-") {
     print $0;
     getline;
   }
 }' mylogfile