每行记录有5部分组成:访问者IP、访问时间、访问资源、访问状态(HTTP状态码)、本次访问流量
如:
27.19.74.143 - - [30/May/2018:17:38:20 +0800] “GET /static/image/common/faq.gif HTTP/1.1” 200 1127
2.代码实现
创建ParserLog类:
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;/** * Author : WGH and wgh * Version : 2020/5/3 $ 1.0 * 解析日志 * ip * 时间 * url * 状态码 * 流量 */public class ParserLog { public static final SimpleDateFormat FORMAT = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss", Locale.ENGLISH); public static final SimpleDateFormat FORMATDATE = new SimpleDateFormat("yyyyMMddHHmmss"); /** * 解析ip * @param line 日志中的一行数据 * 27.19.74.143 - - [30/May/2018:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 1127 * */ public String parserIp(String line){ String[] ips = line.split("- -"); String ip = ips[0].trim(); return ip; } /** * 解析时间 * */ public String parserTime(String line){ //其实索引 int first = line.indexOf("["); //结束索引 int last = line.indexOf("+0800]"); //获取日志时间 String time = line.substring(first+1,last); //进行格式化 //1.现将日志时间格式化为时间戳:日志时间格式d/MMM/yyyy:HH:mm:ss Date parse = null; try { parse = FORMAT.parse(time); } catch (ParseException e) { e.printStackTrace(); } //2.将时间戳格式化yyyyMMddHHmmss return FORMATDATE.format(parse); } /** * 解析url * */ public String parserUrl(String line){ //获取起始索引 int indexOf = line.indexOf("""); //结尾索引 int lastIndexOf = line.lastIndexOf("""); //截取url return line.substring(indexOf + 1,lastIndexOf); } /** * 解析状态码 * */ public String parserStatus(String line){ String trim = line.substring(line.lastIndexOf(""")+1).trim(); return trim.split(" ")[0]; } /** * 解析流量 * */ public String parserFlow(String line){ String trim = line.substring(line.lastIndexOf(""") + 1).trim(); return trim.split(" ")[1]; } /** * 组装数据 * ip 时间 url 状态码 流量 * */ public String[] parser(String line){ String ip = parserIp(line); String time = parserTime(line); String url = parserUrl(line); String status = parserStatus(line); String flow = parserFlow(line); return new String[]{ip,time,url,status,flow}; } public static void main(String[] args){ ParserLog parserLog = new ParserLog(); String[] parser = parserLog.parser("27.19.74.143 - - [30/May/2018:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 1127"); for (String s : parser){ System.out.println(s); } }} 3.运行结果
93023540