使用java程序从web服务器日志中识别会话
我把这种web日志作为文本文件,我想从日志中查找会话,考虑会话时间为30分钟使用java程序从web服务器日志中识别会话,java,web,Java,Web,我把这种web日志作为文本文件,我想从日志中查找会话,考虑会话时间为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 in
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;
}
}
}
}
}
}
}
package com.pradip.test;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.Scanner;
公共类会话标识{
公共静态void main(字符串[]args)引发IOException、ParseException{
扫描仪s=新扫描仪(新文件(“E:\\me\u 3rd\\uniqueurl.txt”);
BufferedWriter=new BufferedWriter(新文件编写器(新文件(“E:\\me\u 3rd\\sessions.txt”));
SimpleDataFormat格式=新的SimpleDataFormat(“dd/mm/yyyy:HH:mm:ss”);
日期d1;
日期d2;
而(s.hasNextLine()){
字符串行=s.nextLine();
扫描仪s1=新扫描仪(新文件(“E:\\me\u 3rd\\ordertoIP.txt”);
while(s1.hasNextLine()){
扫描仪s2=新扫描仪(新文件(“E:\\me\u 3rd\\ordertoIP.txt”);
字符串line1=s1.nextLine();
字符串sline1[]=line1.split(“”);
long id=long.parseLong(sline1[0]);
字符串时间戳=sline1[2];
if(行等于(sline1[1])){
而(s2.hasNextLine()){
字符串line2=s2.nextLine();
字符串sline2[]=line2.split(“”);
long id1=long.parseLong(sline2[0]);
字符串timestamp1=sline2[2];
d1=format.parse(时间戳);
d2=format.parse(timestamp1);
long diff=d2.getTime()-d1.getTime();
长diffSeconds=diff/1000%60;
长diffMinutes=diff/(60*1000)%60;
长diffHours=diff/(60*60*1000)%24;
长diffDays=diff/(24*60*60*1000);
长秒=(diffDays*24*60*60)+(diffHours*60*60)+(diffMinutes*60)+diffSeconds;
如果(秒我相信您是在JSF
或JSP
中开发的。因此,您可以从FacesContext
中检索会话id。您只需在日志中附加此sessionId,就可以根据需要筛选结果
FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
String sessionId = session.getId();
因为您只想在30分钟的会话时间内读取唯一的日志。您可以逐行读取文件,并根据需要填充日志列表。
草图
正确格式化日志文件。web/Timestamp/method/state/action/status/session id等
以字符串形式逐行读取日志文件
如果符合条件(30分钟以内),则将日志拆分并保存到ArrayList中
你说的开发java程序来查找会话
,在日志文件中写入是什么意思?这是web日志分析任务,我想写一个java程序来查找时间段为30分钟的会话如何将日志写入文件。发布一些代码先生,请查看上面的代码。我只想知道逻辑…首先,你必须输入一个web服务器下web上sessionId的键先生,我想写一个简单的java程序,从weblog中查找不同的会话,但我不知道怎么做。只有将键放入日志中,才能区分会话。例如sessionId
最适合这种情况