Thứ Ba, 8 tháng 5, 2018

parse log4j regular expression

public class Test {

    public static void main(String[] args) {
String ymdhmsRegex = "[\\d\\d\\d\\d\\-\\d\\d-\\d\\d \\d\\d:\\d\\d:\\d\\d,\\d\\d\\d]";
        String threadRegex = "\\[(.*)\\]";
        String classRegex = "[\\w]*";
        String lineRegex = "\\((.*)\\)";
        String messageRegex = ".*";
        String log = " INFO 2018-05-08 02:19:58,605 [qtp1945566818-174] DbgSeaApiServlet.java (line 39) getTrans null 180508012105010002";
        String regex = "( INFO )(ymdhmsRegex)(.*)(threadRegex)(.*)(classRegex)(lineRegex)(.*)(messageRegex)";
        regex=regex.replace("ymdhmsRegex", ymdhmsRegex);
        regex=regex.replace("threadRegex", threadRegex);
        regex=regex.replace("classRegex", classRegex);
        regex=regex.replace("lineRegex", lineRegex);
        regex=regex.replace("messageRegex", messageRegex);
//        String partern = " INFO [\\d\\d\\d\\d]-[\\d\\d]-[\\d\\d] [\\d\\d]:[\\d\\d]:[\\d\\d],[\\d\\d]\\d \\[.*\\] *\\.* \\(line [0-9]*\\)";
        System.out.println(log.matches(regex));
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(log);
        System.out.println(matcher.matches() + " " + matcher.groupCount());
        for (int i = 0; i < matcher.groupCount(); i++) {
            System.out.println(i + " " + matcher.group(i));
        }
   }
}



//output


true
true 11
0  INFO 2018-05-08 02:19:58,605 [qtp1945566818-174] DbgSeaApiServlet.java (line 39) getTrans null 180508012105010002
1  INFO 
2 2
3 018-05-08 02:19:58,605 
4 [qtp1945566818-174]
5 qtp1945566818-174
6  DbgSeaApiServlet.java 
8 (line 39)
9 line 39
10  getTrans null 180508012105010002