大数据全系列 教程
1869个小节阅读:468k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
7.7.6 handleLog方法实现
LoggerUtil类的handleLog方法实现。
xxxxxxxxxx
/**解析日志数据,返回处理的结果
* @param logText Nginx中的一条日志数据(在HDFS文件系统中存储着)
* @return 结果被封装到Map对象
*/
public static Map<String, String> handleLog(String logText) {
//声明并实例化一个Map对象
Map<String,String> clientInfo = new HashMap<>();
//logText不为空才进行后续的处理
if(StringUtils.isNotBlank(logText)){
//通过日志中的分隔符进行拆分 ip^AserverTime^Ahost^Alog.gif?en=e_l&...
String[] splits = logText.trim().split(EventLogConstants.LOG_SEPARTIOR);
//splits的length为4时才有必要进行处理
if(splits.length==4){
//ip^AserverTime^Ahost^Alog.gif?en=e_l&...
//将ip信息添加到集合中
clientInfo.put(EventLogConstants.LOG_COLUMN_NAME_IP,splits[0].trim());
//将serverTime(1749410796.976)添加到集合中
clientInfo.put(EventLogConstants.LOG_COLUMN_NAME_SERVER_TIME,
String.valueOf(TimeUtil.parseNginxServerTime2Long(splits[1].trim())));
//处理log.gif?en=e_l&...
int index = splits[3].indexOf("?");
if(index>-1){
//说明存在?,则截取?位置(不包括)到结尾,就是请求数据requestData (en=e_l&...)
String requestData = splits[3].substring(index + 1);
//处理请求参数
handleRequestData(requestData,clientInfo);
//处理浏览器的信息userAgent 将浏览器信息的一个字符串拆分为4个
handleUserAgent(clientInfo);
//处理ip地址
handleIp(clientInfo);
}else{
//数据格式异常,清空map对象中已经添加的数据 ip、serverTime
clientInfo.clear();
}
}
}
return clientInfo;
}
private static void handleRequestData(String requestData, Map<String, String> clientInfo) {
}
private static void handleUserAgent(Map<String, String> clientInfo) {
}
private static void handleIp(Map<String, String> clientInfo) {
}