我有一個MySQL日誌文件,其中包含每個文件上的各種信息(當進行連接時,進行查詢時,連接何時結束等),我必須解析日誌文件,這樣我就可以將每行的數據放在一個數組中,然後根據它進行一些計算。解析Java中的MySQL日誌文件
這裏是從日誌文件的示例:
151011 12:52:51 1 Connect [email protected] on testdb
1 Query SHOW SESSION VARIABLES
1 Query SHOW COLLATION
1 Query SET character_set_results = NULL
1 Query SET autocommit=1
1 Query SELECT q1,q2 FROM q_table
1 Query SELECT s1,s2 FROM s_table
1 Query select count(*) as c from i_table WHERE val = 1
1 Query select count(*) as c from k_table WHERE cid = 1
1 Query SELECT name,age FROM i_table WHERE ck = 1
151011 12:52:54 1 Query SELECT name,aid FROM j_table WHERE co = 1
151011 12:52:59 1 Query SELECT * from values where lastname='smith'
不幸的是該行中的空間不被製表符(「\ t」的)分離。更糟糕的是,一些行在開始時有額外的日期和時間,而有些則沒有。這意味着某些行比其他行有更多的數據需要解析。我將如何解析這個日誌文件?
到目前爲止,我有以下幾點:
Scanner scan = new Scanner(new File("data.log"));
ln = scan.nextLine();
ar = ln.split("\t");
System.out.println(ar[0]);
System.out.println(ar[1]);
但是,打印以下行,例如:
151018 12:52:51 // First slot in the array
1 Connect [email protected] on tested // Second slot in the array
有沒有辦法做到這一點?或者只是不可能?
「不幸的是,行中的空格不會被製表符分隔(」\ t「)」這是什麼意思? – sehe
只需使用'\ s'匹配所有空格字符。 –
如果行中的每個元素在它們之間都有一個共同的分隔符,那將會容易得多。例如,日期,然後標籤空間,然後動作,然後選項卡空間...等等。但是,這裏全是空間。 – DemCodeLines