在分析有一些比较复杂的问题时,比如我只想从海量的日志中分析某个接口功能或者某台机器发起的请求和响应,这时候只用肉眼是不行的,必须对日志进行分析,把自己需要的日志都复制到另外的文本文件中才可以进行一目了然的分析,此外涉及到利用依据数学统计运算的一些功能写程序来实现要比靠肉眼靠谱多了。
一个小小的例子,粘出来,一来自己做个标记,二来送给需要的人。
实现了部分日志分析的工具类源码
package mongo.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class LogTest {
public static void main(String[] args) throws IOException {
System.out.println(getGoodsCount());
}
public static int getGoodsCount() throws IOException{
InputStream inf = new FileInputStream("f:" + File.separator+"machine"+File.separator+"newLog"+File.separator+"test.log.1");
BufferedReader reader= new BufferedReader(new InputStreamReader(inf,"utf-8"));
String line="";
//[request]----[//machine/updateOrderGoods]----【machId=Z081605010009 "pickupWay":"01005"}
//[response]----[//machine/updateOrderGoods]----【machId=Z081605010009
String machineId="Z081605010001";
int sum_count=0;
while((line=reader.readLine())!=null){
line=line+"\r\n";
if(line.contains("[response]----[//machine/updateOrderGoods]----【machId="+machineId)){
//计算出货成功的件数
if(line.contains("\"goodsRemain\":\"0\",\"vipStartDate\":\"\",\"goodsBarcode\":\"0002\"")){
int start=line.indexOf("\"goodsBarcode\":\"0002\",\"goodsPrice\":\"10.00\",\"goodsCount\":\"");
int end=line.indexOf(",\"vipFlag\":\"0\",\"vipEndDate\":\"\",\"goodsName\":\"好运十倍");
int count=Integer.parseInt(line.substring(start+57,end-1));
sum_count+=count;
}
}
}
reader.close();
return sum_count;
}
public static void createFile() throws Exception{
InputStream inf = new FileInputStream("f:" + File.separator+"machine"+File.separator+"info.log.6");
BufferedReader reader= new BufferedReader(new InputStreamReader(inf,"utf-8"));
OutputStream outf = new FileOutputStream("f:" + File.separator+"machine"+File.separator+"test.log.6");
BufferedWriter out=new BufferedWriter(new OutputStreamWriter(outf,"utf-8"));//如果文件不存在会自动创建
String line="";
//[request]----[//machine/initiativeUpdateGoods]----【machId=Z081605010023 //"machWayId":"01003"
//[response]----[//machine/initiativeUpdateGoods]----【machId=Z081605010023
//[request]----[//machine/updateOrderGoods]----【machId=Z081605010009 "pickupWay":"01005"}
//[response]----[//machine/updateOrderGoods]----【machId=Z081605010009
String machineId="Z081605010001";
String machWayId="01002";
boolean flag=false;
while((line=reader.readLine())!=null){
System.out.println(line);
line=line+"\r\n";
boolean isWrite=false;
if(line.contains("[request]----[//machine/initiativeUpdateGoods]----【machId="+machineId)){
if(line.contains("\"machWayId\":\""+machWayId+"\"")){
flag=true;
isWrite=true;
}
}else if(line.contains("[response]----[//machine/initiativeUpdateGoods]----【machId="+machineId)&&flag){
isWrite=true;
flag=false;
}else
if(line.contains("[request]----[//machine/updateOrderGoods]----【machId="+machineId)){
if(line.contains("\"pickupWay\":\""+machWayId+"\"")){
flag=true;
isWrite=true;
}
}else if(line.contains("[response]----[//machine/updateOrderGoods]----【machId="+machineId)&&flag){
isWrite=true;
flag=false;
//计算出货成功的件数
if(line.contains("\"goodsRemain\":\"0\",\"vipStartDate\":\"\",\"goodsBarcode\":\"0002\"")){
int start=line.indexOf("\"goodsBarcode\":\"0002\",\"goodsPrice\":\"10.00\",\"goodsCount\":\"");
int end=line.indexOf("\",\"vipFlag");
String count=line.substring(start+57,end);
System.out.println(count);
}
}
if(isWrite){
out.write(line);
}
}
reader.close();
out.close();
}
}