日志数据清洗(简单版)

1.数据情况

每行记录有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.运行结果

日志数据清洗(简单版)_第1张图片

你可能感兴趣的:(大数据,大数据,java)