我有这种网络日志作为文本文件,我希望通过将会话时间视为30分钟从日志中查找会话。
1 in24.inetnebr.com 01/08/1995:00:00:01 GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt 200 1839
2 in24.inetnebr.com 01/08/1995:00:00:34 GET /shuttle/missions/sts-68/news/sts-68-mcc-06.txt 200 2303
3 in24.inetnebr.com 01/08/1995:00:05:01 GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt 200 1839
4 in24.inetnebr.com 01/08/1995:00:30:00 GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt 200 1839
5 in24.inetnebr.com 01/08/1995:00:30:55 GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt 200 1839
6 in24.inetnebr.com 01/08/1995:00:35:00 GET /shuttle/missions/sts-68/news/sts-68-mcc-05.txt 200 1839
7 slppp6.intermind.net 01/08/1995:00:00:10 GET
/history/skylab/skylab.html 200 1687
8 slppp6.intermind.net 01/08/1995:00:00:32 GET /history/skylab/skylab-1.html 200 1659
9 slppp6.intermind.net 01/08/1995:00:30:00 GET /history/skylab/skylab.html 200 1687
10 slppp6.intermind.net 01/08/1995:00:35:10 GET
/history/skylab/skylab.html 200 1687
11 133.43.96.45 01/08/1995:00:00:16 GET /shuttle/missions/sts-69/mission-sts-69.html 200 10566
12 133.43.96.45 01/08/1995:00:00:55 GET /shuttle/missions/sts-69/mission-sts-69.html 200 10566
13 133.43.96.45 01/08/1995:00:30:16 GET /shuttle/missions/sts-69/mission-sts-69.html 200 10566
14 133.43.96.45 01/08/1995:00:55:16 GET /shuttle/missions/sts-69/mission-sts-69.html 200 10566
帮助我开发用于查找会话的java程序以及我必须使用的数据结构。
package com.pradip.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SessionIdentification {
public static void main(String[] args) throws IOException, ParseException {
Scanner s=new Scanner(new File("E:\\me_3rd\\uniqueurl.txt"));
BufferedWriter writer=new BufferedWriter(new FileWriter(new File("E:\\me_3rd\\sessions.txt")));
SimpleDateFormat format=new SimpleDateFormat("dd/mm/yyyy:HH:mm:ss");
Date d1;
Date d2;
while (s.hasNextLine()) {
String line=s.nextLine();
Scanner s1=new Scanner(new File("E:\\me_3rd\\ordertoIP.txt"));
while(s1.hasNextLine()){
Scanner s2=new Scanner(new File("E:\\me_3rd\\ordertoIP.txt"));
String line1=s1.nextLine();
String sline1[]=line1.split("");
long id=Long.parseLong(sline1[0]);
String timestamp=sline1[2];
if(line.equals(sline1[1])){
while (s2.hasNextLine()) {
String line2=s2.nextLine();
String sline2[]=line2.split(" ");
long id1=Long.parseLong(sline2[0]);
String timestamp1=sline2[2];
d1=format.parse(timestamp);
d2=format.parse(timestamp1);
long diff=d2.getTime()-d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
long seconds=(diffDays*24*60*60)+(diffHours*60*60)+(diffMinutes*60)+diffSeconds;
if(seconds<=1800){
continue ;
}
else{
String sessionboundry=id+" "+id1; //id1-1
break;
}
}
}
}
}
}
}
这是我尝试但我不知道接下来要尝试什么
答案 0 :(得分:0)
我相信你是在JSF
或JSP
开发的。因此,您可以从FacesContext
检索会话ID。您只需要在日志中附加此sessionId,而不是过滤结果。根据您的要求
FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
String sessionId = session.getId();
由于您只对30分钟的阅读和独特日志感兴趣。您可以逐行读取文件并根据日志填充日志列表。 草图