使用java程序从web服务器日志中识别会话

使用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

我把这种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 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
    最适合这种情况