java - 使用java程序从Web服务器日志中识别 session

标签 java web

我有这种网络日志作为文本文件,我想通过将 session 时间视为 30 分钟来从日志中查找 session 。

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程序来查找 session 以及我必须使用的数据结构。

 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;
                    }
                }


            }
        }
    }
}

 }

这是我尝试过的,但我不知道下一步该尝试什么

最佳答案

我相信您正在使用 JSFJSP 进行开发。因此,您可以从 FacesContext 中检索 session ID。您只需将此 sessionId 附加到日志中,就可以过滤结果。按照您的要求

FacesContext fCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
String sessionId = session.getId();

因为您只对 30 分钟 session 内的阅读和独特日志感兴趣。您可以逐行读取文件并根据内容填充日志列表。 粗略的草图

  1. 正确格式化您的日志文件。 web/时间戳/方法/状态/操作/状态/ session ID 等
  2. 以字符串形式逐行读取日志文件。
  3. 如果符合条件(30 分钟以内),则将日志拆分并保存到 ArrayList 中。

关于java - 使用java程序从Web服务器日志中识别 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898727/

相关文章:

java - Hibernate 注解 Java 映射

java - 为什么线程会在我的 actionListener 实现中卡住我的代码?

javascript - 单击链接后如何保留以前网页的内容?

javascript - 文本区域中的对象数组条件样式。 Angular 6

本地设置时 JavaScript 无法正常运行

java - Gradle : change is springboot version causes error

java - 连接到本地 Web 服务的 Android 模拟器

java - 删除在 hibernate 中不起作用

cookies - 什么是 arp_scroll_position cookie 以及如何防止它?

Java 计时器 - 无论如何将其更改为在打开页面时自动启动而不是单击开始