当前位置 : 主页 > 编程语言 > java >

Log日志文本,分析工具

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt package com.keesail.weba;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.validation.constr
gistfile1.txt
package com.keesail.weba;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.validation.constraints.Pattern.Flag;

/**
 * 读取日志接口访问数量
 * @author 崔展川
 * @date 2017.11.27
 */
public class KeeReadFileLog
{
	private static final String URI = "找到action";
	private static final String DECODE = "请求参数解密后";

	/**
	 * 获取日志中,用户访问接口的次数;
	 * @param fileName			文件地址
	 * @param interfaceName		接口名称
	 * @param userId 			用户id
	 * 
	 * @return	num 			请求次数
	 * @throws Exception 
	 */
	public static int getVisitNum(String fileName, String interfaceName, String userId) throws Exception
	{
		int num = 0; //请求次数

		File file = new File(fileName);
		BufferedReader br = new BufferedReader(new FileReader(file)); //获取文件流

		String line = null; //当前行数据
		boolean flag = false; //是否对该行数据,进行处理;

		List
 
  > listMaps = null; //日志一次请求map集合;

		//分析文件数据
		while ((line = br.readLine()) != null)
		{
			if (line.contains("#######   开始NEW请求   ######"))
			{
				flag = true;

				listMaps = new ArrayList
  
   >(); } if (line.contains("==== 结束请求 ======")) { flag = false; //对当前请求进行分析 if (checkLog(listMaps, interfaceName, userId)) //如果,当前请求 有接口名称和用户id,那么就算该用户请求 一次; { num++; } } if (flag) //对当前行数据,进行处理;并已Map形式存储 { Map
   
     map = new HashMap
    
     (); if (line.contains(":")) //当前行,是否包含 “:” { String[] value = line.split(":"); //通过关键字 “:” 截取数据 if (value[0].contains("】")) { String[] key = value[0].split("】"); map.put(key[1], value[1]); //存储,当前行 标题和 内容; listMaps.add(map); } } } } return num; } /** * 对当前请求进行分析 * @param listMaps 请求对象 * @param interfaceName 接口名称 * @param userId 用户id * * @return flag 当前用户是否请求 */ public static boolean checkLog(List
     
      > listMaps, String interfaceName, String userId) { boolean flag = false; boolean uriFlag = false; //接口名称,是否对应; boolean userIdFlag = false; //用户id,是否对应; //对当前请求进行分析 for (int j = 0; j < listMaps.size(); j++) { Map
      
        map = listMaps.get(j); //获取当前行,数据; if (map.containsKey(URI)) { if (map.get(URI).contains(interfaceName))//当前行,是否包含 接口名称 { uriFlag = true; } } if (map.containsKey(DECODE)) { if (map.get(DECODE).contains(userId))//当前行,是否包含 用户id; { userIdFlag = true; } } if (uriFlag && userIdFlag) //如果,当前请求 有接口名称和用户id,那么就算该用户请求 一次; { flag = true; } } return flag; } public static void main(String[] args) { String fileName = "C:/Users/CCC/Desktop/catalina.2017-11-20.out"; String uri = "/api/user/login"; String userId = "2017090716424746260"; try { int num = KeeReadFileLog.getVisitNum(fileName, uri, userId); System.err.print("用户("+userId+"):请求" + num + "次;"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
      
     
    
   
  
 
上一篇:Android 禁止截屏
下一篇:内容提供者
网友评论