簡體   English   中英

使用Java必需的匹配模式解析日志文件

[英]parse a log file using java required matching pattern

我正在嘗試使用Java中的正則表達式解析日志。 我正在玩Java中的日志文件,因此可以提取日志字段。 例如,我有以下一行:

enterprises.140.625.100.50=[STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default<self-tuning>

我想要這樣的輸出:

"enterprises" = Apr 10 21:08:55
"Ip address" = 140.625.100.50
"word stuck" = STUCK

想法是從日志文件中獲取“卡住”一詞並計算卡住的線程

到目前為止,這是我的Java代碼:我不知道如何為此編寫模式。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import java.util.*;

import org.apache.log4j.Logger;
public class StuckThread {

    static Logger logger = Logger.getLogger(StuckThread.class);

    public static final int RETURN_CODE_SUCCESS = 0;

    public static final int RETURN_CODE_ERROR = 1;
    public static void main(String[] args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // declare as DateFormat
        Calendar today = Calendar.getInstance();

        Date d1 = today.getTime();
        String today1 =sdf.format(d1);
        System.out.println(today1);
        Calendar yesterday = Calendar.getInstance();
        yesterday.add(Calendar.DATE, -1);
        Date d = yesterday.getTime(); // get a Date object
        String yesDate = sdf.format(d); // toString for Calendars is mostly not really useful
        System.out.println(yesDate);

        if(yesDate.equals("2016-04-20")){
            BufferedReader br = null;    
            try {
                String sCurrentLine;
                int count = 0;
                //String[] arLine = new String[0];
                br = new BufferedReader(new FileReader("C:\\testing.txt"));                 

                String line = "enterprises.140.625.100.50=[STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default<self-tuning>; 

                String pattern = "  ";
                Pattern r = Pattern.compile(pattern);

                Matcher m = r.matcher(line);

                String  stuckGroup=null;

                if (m.find()) {                     
                 stuckGroup=m.group(5);
                }
                while ((sCurrentLine = br.readLine()) != null) {                                                                
                     if (sCurrentLine.contains(stuckGroup)){                                
                         count++;
                    }
                }    
                logger.info("total count of stuck thread: "+count);
                System.exit(RETURN_CODE_SUCCESS);                                   
            } catch (IOException e) {
                e.printStackTrace();

                System.exit(RETURN_CODE_ERROR);

            }finally {
                try {
                    if (br != null)br.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }   
        }                       
    }
}

卡在模式的寫作中,不確定如何寫。 I.有人可以幫我嗎?

以下模式:

    String pattern = "(\\w+)\\.(.*)=\\[(.*)\\]";

    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(line);

    if (m.find()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
        System.out.println(m.group(3));
    }

返回值:

enterprises
140.625.100.50
STUCK

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM