如下为 Apache common 生成的日志信息格式:
27.19.74.143 - - [30/May/2013:17:38:20 +0800] \"GET /static/image/common/faq.gif HTTP/1.1\" 200 1127
分别表示:访问ip、访问时间、访问资源、访问状态、本次流量;
也即:
27.19.74.143, 20130530053820, GET /static/image/common/faq.gif HTTP/1.1, 200, 1127
Java 代码如下:
package Log;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class LogParser {
static final SimpleDateFormat old = new SimpleDateFormat("dd/MMM/yyyy:hh:mm:ss", Locale.ENGLISH);
static final SimpleDateFormat now = new SimpleDateFormat("yyyyMMddhhmmss");
public static void main(String[] args) {
String S1 = "27.19.74.143 - - [30/May/2013:17:38:20 +0800] \"GET /static/image/common/faq.gif HTTP/1.1\" 200 1127";
System.out.println(S1);
String[] splited = new LogParser().parse(S1);
System.out.format("%s, %s, %s, %s, %s", splited[0], splited[1], splited[2], splited[3], splited[4]);
}
public String[] parse(String line){
String ip = parseIP(line);
String time = parseTime(line);
String url = parseURL(line);
String status = parseStatus(line);
String traffic = parseTraffic(line);
return new String[]{ip, time, url, status, traffic};
}
private String parseIP(String line){
return line.split("- -")[0].trim();
}
private String parseTimeFormat(String time){
Date parse = null;
try {
parse = old.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return now.format(parse);
}
private String parseTime(String line){
int first = line.indexOf("[");
int last = line.indexOf("+0800]");
String time = line.substring(first+1, last).trim();
return parseTimeFormat(time);
}
private String parseURL(String line){
int first = line.indexOf("\"");
int last = line.lastIndexOf("\"");
return line.substring(first+1, last);
}
private String parseStatus(String line){
String trim = line.substring(line.lastIndexOf("\"")+1).trim();
return trim.split(" ")[0];
}
private String parseTraffic(String line){
String trim = line.substring(line.lastIndexOf("\"")+1).trim();
return trim.split(" ")[1];
}
}