Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从apache访问日志生成流量统计信息_Java_Algorithm_Data Structures - Fatal编程技术网

Java 从apache访问日志生成流量统计信息

Java 从apache访问日志生成流量统计信息,java,algorithm,data-structures,Java,Algorithm,Data Structures,我有以下几行日志 “[123456]/stream 200”、“[45678]/chatty 200”、“[123456]/stream 400”、“[123456]/text 200” 我需要生成流量统计数据(关于每秒命中最多的端点)。在这种情况下,输出将为 123456 /stream 45678 /chatty 我已经用Java编写了以下代码。基本上,我的数据结构表示{“Timestamp”:{“endpoint”:count} public class LogParser {

我有以下几行日志

“[123456]/stream 200”、“[45678]/chatty 200”、“[123456]/stream 400”、“[123456]/text 200”

我需要生成流量统计数据(关于每秒命中最多的端点)。在这种情况下,输出将为

123456  /stream
45678   /chatty
我已经用Java编写了以下代码。基本上,我的数据结构表示
{“Timestamp”:{“endpoint”:count}

public class LogParser {


    private static void solve(String [] lines) {
        Map<String, Map<String, Integer>> map = new HashMap<>();
        Map<String, Integer> urlMap = null;
        int size = lines.length;
        for (int i=0; i<size; i++) {
            String [] data = lines[i].split(" ");
            if (map.containsKey(data[0])) {
                urlMap = map.get(data[0]);
            } else {
                urlMap = new HashMap<>();
            }
            if (urlMap.containsKey(data[1])) {
                urlMap.put(data[1], urlMap.get(data[1])+1);
            } else {
                urlMap.put(data[1], 1);
            }
            map.put(data[0], urlMap);
        }
        System.out.println(map.toString());

    }
    public static void main(String[] args) {
            String [] lines = {"[123456] /stream 200", "[45678] /chatty 200", "[123456] /stream 400", "[123456] /text 200"};
            solve(lines);
    }
}
公共类日志解析器{
私有静态void solve(字符串[]行){
Map Map=newhashmap();
映射urlMap=null;
int size=lines.length;

对于(int i=0;不需要时间戳来知道哪个端点被调用最多。只需使用一个映射,其中键是端点,值是计数,然后将映射的条目放入一个列表中,并对该列表进行排序(或者只需找到最大值,如果这是您所需要的)。我需要时间戳,因为我需要按时间戳对端点计数进行分组。因此,对于每个不同的时间戳,您需要被称为最多的端点?原则是相同的,只是您将有多个映射(每个时间戳一个),并且您将找到每个映射的最大条目。