Logfile Analyse

Fjolle

Mitglied
Hallo zusammen,

ich soll eine Logfile Analyse an einem Logfile einer chinesischen Suchmaschine durchführen.
Die Logfile ist eine Text-Datei die, die Daten in den folgenden 4 Spalten enthält:

IP als Hash || Suchanfrage || Ranking und Klicks || Aufgerufene URL
6583834172867 || [军人同志] || 9 1 || fo.perinetics.net/yi/a1833z4448.html

Ich bin jetzt soweit, dass ich die Daten spaltenweise einlese und als einzelne Strings in einer Array-List speicher.

Als nächstes soll ich den einzelnern User-IDs Suchanfragen zuordnen und so Sessions ausfindig machen. Hier komm ich allerdings nicht wirklich weiter.
Mir ist klar, dass ich die IDs iwie rausholen/identifizieren muss um sie dann mit den Suchanfragen zu vergleichen, aber ich weiß nicht wie. Im folgenden ist der Code, den ich bisher habe.

Wir hatten Java vor 2 Jahren in einem Kurs und seit dem im Studium nichts mehr damit zu tun, dementsprechend fang ich nun quasi von vorne an. Über Hilfe wie es weitergehen kann, wäre ich dankbar.


Java:
package analyzer;

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList;
import java.util.StringTokenizer;

public class LogfileReader { 

    private static void ladeDatei(String datName) { 
    	
    ArrayList<String> array = new ArrayList<String>();
    StringTokenizer tk = new StringTokenizer("<data>", "<\t>");

        File file = new File(datName); 

        if (!file.canRead() || !file.isFile()) 
            System.exit(0); 

            BufferedReader in = null; 
            
        try { 
            in = new BufferedReader(new FileReader(datName)); 
            String zeile = null; 
            while ((zeile = in.readLine()) != null) { 
            	
            	if (tk.hasMoreTokens()) {
                	array.add(tk.nextToken());
            	}
            	
                System.out.println("Gelesene Zeile: " + zeile); 
            } 
        } 
        
        catch (IOException e) { 
            e.printStackTrace(); 
        } 
        
        finally { 
            if (in != null) 
                try { 
                    in.close(); 
                } 
            
            catch (IOException e) { 
            } 
        } 
    } 

    public static void main(String[] args) { 
        String dateiName = "logfile_uni.txt"; 
        ladeDatei(dateiName); 
    } 
}
 
Zuletzt bearbeitet:

turtle

Top Contributor
fang ich nun quasi von vorne an

Musst du das in Java machen?

Logfiles können SEHR gross sein und dann noch mit Java analysieren, was du nicht wirklich beherrscht? WARUM?


Ich würde das unter Unix machen. Da gibt es das Tool awk das hervorragend geeignet wäre.

Die Unix-Tools gibt es auch unter Windows und heißen Cygwin.
 

Fjolle

Mitglied
Leider muss die Aufgabe in Java erledigt werden. Und ja, Logfiles können groß werden und sind sie auch, aber ich arbeite nur mit einem Ausschnitt der eigentlichen Datei.
 

Fjolle

Mitglied
Hallo nochmal,

habe nun etwas rumüberlegt und gesucht und gedacht, dass vllt eine Realiserung über eine Hashmap sinnvoller wäre.

Nun habe ich gedacht, dass ich eine neue Klasse "Session" anlege und dort ein Objekt "IP" für die Klasse anlege.
Eine Session soll so definiert sein, dass solange ich die selbe IP einlese, es eine Session ist. Sobald es eine neue IP ist, ist diese Session damit beendet.

Außerdem dachte ich, dass ich eine weitere Klasse für die Suchanfrage anlege.

Die Hashmap könnte man evt so realiseren, dass ich die "IP" als key anlege und alle anderen Daten/Suchanfragen zu einer IP in einem hashset.

Macht das Sinn? Kann mir jemand bitte weiterhelfen?
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen


Oben