ServerLog auslesen und Statistik erstellen

Fire_X

Mitglied
Hallo Liebe Java Freunde,

ich mache zur Zeit eine Ausbildung zum IT-Systemelektroniker. Wir lernen in der Berufsschule zur Zeit die Programmiersprache Java.
Nun haben wir eine Hausaufgabe bekommen in der wir einen ServerLog auslesen sollen und die Anzahl von z.B Errors Statistisch darstellen sollen.
Da ich mittlerweile mich schon durch ettliche Bücher, Foren und diesem Forum per Suchfunktion gekämpft habe, verstehe ich nichts mehr ???:L:autsch:
Mein Problem ist es, wie kann ich erreichen das ein String, der aus Unterschiedlichsten Zeichen besteht mir eine Statistik liefern kann, in der ich sofort erkennen kann was wie oft vorgekommen ist.

Hier einmal ein paar Zeilen aus dem ServerLog:
  • 01/31/05;11:56:38;__init__;DEBUG; 404 because file does not exist: h:\Programmierung\python\snakelets\webapps\ROOT\favicon.ico
  • 01/31/05;12:21:08;__init__;INFO; sendfile(2) is NOT available; compatible but slower file serving is used
  • 01/31/05;12:21:09;__init__;WARNING; Defaulting to loading all available web apps to the current host.
  • 01/31/05;12:21:09;__init__;WARNING; \NOTICE: VirtualHost configuration is NOT enabled.

Bisher habe ich folgenden Code.
Java:
import java.io.*;
import java.lang.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileReader;

/**
 *  ServerLog Datei Auslesen
 *  Programmiert by
 */

public class ServerLog{

       public static void main(String args[]) throws IOException
       {
         String Zeile;
         int eingabe;
         BufferedReader leseStream = new BufferedReader (new FileReader("Server.log"));

         System.out.println("***************************************************************************");//Zeile für ein ansprechendes Optisches Design
         System.out.println("************                                                    ***********");
         System.out.println("************               Auflistung der Eingabe               ***********");//Hier werden dem User der möglichen Eingaben aufgelistet
         System.out.println("************                                                    ***********");
         System.out.println("************             Fuer INFO bitte 1 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************            Fuer DEBUG bitte 2 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************          Fuer WARNING bitte 3 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************            Fuer ERROR bitte 4 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("***************************************************************************");
         System.out.println("***************************************************************************");
         System.out.println("************                                                    ***********");
         System.out.println("************                                                    ***********");
         eingabe=IO.readInt("                    Tätigen Sie bitte Ihre Eingabe: "); //Eingabe des Users

         while ( (Zeile = leseStream.readLine()) != null) {

               String s = Zeile;


               if (eingabe == 1) {                                                   //Hier wird mittels If Bedinungen geprüft welche Eingabe der User getroffen hat

               }
               
               if (eingabe == 2) {

               }
               
               if (eingabe == 3) {

               }
               
               if (eingabe == 4) {

               }
         }

       }

}
 

Fire_X

Mitglied
Ups, dagehts schon los, bin zu verwirrt :)

Meine Frage, wie muss der Code aussehen, damit wenn z.B der User "1" eingibt um eine Statistik über die Anzahl der INFO´s im ServerLog zu bekommen.

Habe es schon mit mehreren sachen (indexOf, replace, trimm) aber nicht das rausgekommen, was ich haben wollte.
 

Fab1

Top Contributor
Du hast einen String, den willst du mit "==" mit einer Zahl vergleichen das funktioniert allerdings so nicht.

Entweder du parst den String in ein int. Oder du vergleichst den String mit equals() mit einem anderen String.

Variablen gehören klein :)
 

Fire_X

Mitglied
Du hast einen String, den willst du mit "==" mit einer Zahl vergleichen das funktioniert allerdings so nicht.

Entweder du parst den String in ein int. Oder du vergleichst den String mit equals() mit einem anderen String.

Variablen gehören klein :)

Ehm... Ich vergleiche in der If Bedingung keinen String.
Entweder Denke ich jezt falsch oder du hast dich da falsch ausgedrückt :oops:
 

Fab1

Top Contributor
Ehm... Ich vergleiche in der If Bedingung keinen String.
Entweder Denke ich jezt falsch oder du hast dich da falsch ausgedrückt :oops:

Oh Entschuldigung, da hab ich mich aber kräftig verschaut:oops:

damit wenn z.B der User "1" eingibt um eine Statistik über die Anzahl der INFO´s im ServerLog zu bekommen.

Was meinst du genau mit Statistik?

über die Anzahl der INFO´s im ServerLog

So wie es in deinem ersten Post aussieht, entspricht eine Zeile einer Info, somit müsstest du ja nur die vorhandenen nicht leer Zeilen zählen und dir merken. Wenn es überhaupt so gewollt ist, steh grade noch bisschen auf dem Schlauch.
 

Fire_X

Mitglied
nunja, mit statistik ist gemeint, dass zb. in dem Serverlog 100x der Eintrag Info zu finden ist.
Also dass mir dieses Nette Programm alle Zeilen mit INFO nach der Uhrzeit/Datum zählt und diese dann ausgiebt.
Also:
Die Anzahl der Systemmeldungen "Info" beträgt: x-Mal
 

Fab1

Top Contributor
Also Zeile einlesen auf "Info" überprüfen wenn ja, dann Variable um 1 erhöhen, wenn nein "nichts machen"

Schau mal in der SuFu dazu gibt es einige Beispiele.
 

Fire_X

Mitglied
Ok.. entweder bin ich zu Doof oder ich verstehe deine Aussage nicht ganz,
wenn ich nach Solchen Schlüsselwörten suche, finde ich nie das was ich brauch.
Könntest du deine Aussage bitte genauer erläutern? :oops:
 

Fab1

Top Contributor
Ich hab ja auch so das Gefühl, dass wir uns missverstehen.

Und so recht weiß ich auch nicht, woher du
Code:
IO
bekommst, ich war einfach mal so frech und es an meine Kenntnisse angepasst.

So der Code steht unten. Zur Erklärung ich hab ein paar Sachen geändert. Klassenname oder Namen der Datei musst du dann einfach wieder anpassen, sonst kannst du den Code nämlich nicht ausführen.

Also wenn die Textdatei (Server.log) so aufgebaut ist, wie von dir beschrieben, dann sollte alles funktionieren.

So nun meine Vorgehensweise:

Am Anfang wird die Benutzereingabe abgefragt und diese anschließend in ein Int geparst. Anschließend wird überprüft, welche Zahl eingegeben wurde. Und entsprechend wird das Wort "zuPruefendeWort" geändert, nach dem gesucht werden muss (ERROR, INFO etc.)

Anschließend wird die Textdatei Zeile für Zeile durchlaufen. Und jede Zeile wird bei ";" gesplittet.
Das bedeutet, dass in einem String Array einzelne Teile der Zeile gespeichert werden.

Da die Textdatei wie von dir beschrieben aufgebaut ist, bekommt man, wenn man den Index 3 von dem String Array anspricht immer die Art der Statistik (Info, Error, etc).
Ein Array arbeitet mit Index. Ein Index beginnt immer mit 0, somit wäre das der erste Teil der Zeile.


Genau diese Art braucht man natürlich, denn mit dieser muss man das zuPruefendeWort vergleichen. Strings vergleicht man mit Equals, da ein String ein Objekt und kein primitiver Datentyp wie zum Beispiel int ist.

Haben wir einen Treffer, also sind beide Strings gleich, dann wird eine Variable hochgezählt.

Diese Variable wird am Schluss ausgegeben. Und alle sind hoffentlich glücklich. :toll:

Ich hoffe ich konnte dir damit helfen.

Java:
import java.io.*;
import java.lang.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileReader;
 
/**
 *  ServerLog Datei Auslesen
 *  Programmiert by
 */
 
public class Test{
 
       public static void main(String args[]) throws IOException
       {
         String zeile;
         String zuPruefendeWort ="";
         int anzahlDaten = 0;
         String eingabeString;
      
         BufferedReader leseStream = new BufferedReader (new FileReader("text.txt"));
 
         System.out.println("***************************************************************************");//Zeile für ein ansprechendes Optisches Design
         System.out.println("************                                                    ***********");
         System.out.println("************               Auflistung der Eingabe               ***********");//Hier werden dem User der möglichen Eingaben aufgelistet
         System.out.println("************                                                    ***********");
         System.out.println("************             Fuer INFO bitte 1 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************            Fuer DEBUG bitte 2 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************          Fuer WARNING bitte 3 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("************            Fuer ERROR bitte 4 eingeben             ***********");
         System.out.println("************                                                    ***********");
         System.out.println("***************************************************************************");
         System.out.println("***************************************************************************");
         System.out.println("************                                                    ***********");
         System.out.println("************                                                    ***********");
         System.out.println("                    Tätigen Sie bitte Ihre Eingabe: "); //Eingabe des Users
        
         BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
         
         eingabeString = console.readLine();
         
         // parsen
         int eingabeInt = Integer.parseInt(eingabeString);
         
         //System.out.println("Eingabe:" + eingabeInt);
         
         
         if (eingabeInt == 1) {                                                   //Hier wird mittels If Bedinungen geprüft welche Eingabe der User getroffen hat
      	   System.out.println("Es wurde 1 eingegeben, die INFO Statistik wird angezeigt");
      	 zuPruefendeWort = "INFO";
         }
         
         if (eingabeInt == 2) {
      	   System.out.println("Es wurde 2 eingegeben, die DEBUG Statistik wird angezeigt");
      	 zuPruefendeWort = "DEBUG";
         }
   
         if (eingabeInt == 3) {
      	   System.out.println("Es wurde 3 eingegeben, die WARNING Statistik wird angezeigt");
      	 zuPruefendeWort = "WARNING";
         }
         
         if (eingabeInt == 4) {
      	   System.out.println("Es wurde 4 eingegeben, die ERROR Statistik wird angezeigt");
      	 zuPruefendeWort = "ERROR";
         }
         if(eingabeInt >4 || eingabeInt <1){
      	   System.out.println("Die Eingabe war falsch, bitte starten Sie das Programm neu");
      	   System.exit(0);
         }
         
         while ( (zeile = leseStream.readLine()) != null) {
 
              String [] teile = zeile.split(";");
              //System.out.println(teile[3]);
              if(teile[3].equals(zuPruefendeWort)){
            	  anzahlDaten++;
              }
          
         }
         //Statistik wird ausgegeben
         System.out.println("Die Statistik besagt, dass die " + zuPruefendeWort + " Statistik eine Anzahl von " + anzahlDaten + " besitzen");
 
       }

}
 

Neue Themen


Oben