Hallo zusammen,
für die Schule sollen wir einen Apache Server Logfile mithilfe von regulären Ausdrücken durchsuchen und dann eine Statistik generieren.
Ein Datensatz sieht zum Beispiel so aus:
Mithilfe des regulären Ausdrucks
hole ich mir das Datum dort heraus.
Das klappt auch soweit.
Der Abschnitt geht ca. 200mal gut, und dann kommt es auf einmal zu "unparsebeln Dates" was ich überhaupt nicht verstehen kann!
Wisst ihr weiter?
Mein Programm:
Apache Logfile Beispiel:
Danke schonmal und voraus
Liebe Grüße
für die Schule sollen wir einen Apache Server Logfile mithilfe von regulären Ausdrücken durchsuchen und dann eine Statistik generieren.
Ein Datensatz sieht zum Beispiel so aus:
Code:
127.0.0.1 - - [02/Dec/2008:09:43:12 +0100] "GET /phpmyadmin/navigation.php?db=testdb&token=607ffb00d35d07043baca5a9d4cea54c HTTP/1.1" 200 1759
Mithilfe des regulären Ausdrucks
Code:
(?<=\[)[0-9]{1,2}\/([A-Z]|[a-z]){3}\/[0-9]{4}\:([0-9]{2}\:){2}[0-9]{2}\ [\+|\-][0-9]{4}(?=\])
Das klappt auch soweit.
Code:
datum = new String(line.substring(matcher.start(), matcher.end()));
SimpleDateFormat format = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss z");
Date dt = new Date();
format.format(dt);
try {
dt = format.parse(datum);
zeile.add(dt);
dt = null;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Wisst ihr weiter?
Mein Programm:
Java:
package de.szut.dqi;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LogfileAnalyzer {
private ArrayList<String> regex;
private ArrayList<ArrayList<Object>> inhalt = new ArrayList<ArrayList<Object>>();
private HashMap<String, String> monate = new HashMap<String, String>();
public static void main(String [] args) {
LogfileAnalyzer a = new LogfileAnalyzer();
a.generiereRegex();
a.readLog(new File("access.log"));
}
//Diese Methode generiert die Statistik. Sie durchsucht den Inhalt nach den einzelnen
//Typen wie IP-Adresse, Datum usw und schreibt dieses dann in eine weitere Statistik
//Array, welches die einzelnen Dateneinträge beinhaltet und zählt, sofern sie verschieden sind.
private void generiereStatistik() {
}
//Diese Methode generiert das Array, welches die regulären Ausdrücke für die
//verschiedenen Inhalte einer Zeile beinhaltet.
private void generiereRegex() {
regex = new ArrayList<String>();
regex.add("([0-9]{1,3}\\.){3}[0-9]{1,3}(?=\\ \\-\\ \\-\\ )"); //ip adresse
regex.add("(?<=\\[)[0-9]{1,2}\\/([A-Z]|[a-z]){3}\\/[0-9]{4}\\:([0-9]{2}\\:){2}[0-9]{2}\\ [\\+|\\-][0-9]{4}(?=\\])"); //datum
regex.add("(?<=\\ \")[A-Z]{3,7}(?=\\ \\/)"); //befehl
regex.add("(?<=\\ )(\\/(\\w)+)+(\\.[\\w]+)(?=\\ )"); //datei
regex.add("(?<=\\ )[A-Z]+\\/([0-9]\\.)+[0-9](?=\"\\ )"); //protokoll
regex.add("(?<=\"\\ )[0-9]{3}(?=\\ )"); //status
regex.add("(?<=\"\\ [0-9]{3}\\ )[0-9]*"); //datenmenge
monate.put("JAN", "01");
monate.put("FEB", "02");
monate.put("MAR", "03");
monate.put("APR", "04");
monate.put("MAY", "05");
monate.put("JUN", "06");
monate.put("JUL", "07");
monate.put("AUG", "08");
monate.put("SEP", "09");
monate.put("OCT", "10");
monate.put("NOV", "11");
monate.put("DEC", "12");
}
//Diese Methode soll die Apache-Logdatei einlesen und mithilfe von regülären Ausdrücken
//ein String-Array erstellen, welches dann in ein Array-Array geschrieben wird.
private void readLog(File filename) {
Matcher matcher;
ArrayList<Object> zeile = new ArrayList<Object>();
String line;
String ip;
String datum;
String befehl;
String datei;
String protokoll;
String status;
String datenmenge;
try {
BufferedReader in = new BufferedReader(new FileReader(filename));
line = in.readLine();
while (line != null) {
for (int i = 0; i < 7; i++) {
System.out.println(line);
matcher = Pattern.compile(regex.get(i)).matcher(line);
if (matcher.find()) {
if (i != 1) {
zeile.add(new String(line.substring(matcher.start(), matcher.end())));
} else {
datum = new String(line.substring(matcher.start(), matcher.end()));
SimpleDateFormat format = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss z");
Date dt = new Date();
format.format(dt);
try {
dt = format.parse(datum);
zeile.add(dt);
dt = null;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
inhalt.add((ArrayList<Object>) zeile.clone());
zeile.clear();
line = in.readLine();
}
System.out.println(inhalt);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Apache Logfile Beispiel:
Code:
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/phpmyadmin.css.php?token=607ffb00d35d07043baca5a9d4cea54c&js_frame=right&nocache=3671410324 HTTP/1.1" 200 20584
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/logo_left.png HTTP/1.1" 200 6854
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_home.png HTTP/1.1" 200 370
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_selboard.png HTTP/1.1" 200 274
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_sqlhelp.png HTTP/1.1" 200 287
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_docs.png HTTP/1.1" 200 292
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_help.png HTTP/1.1" 200 229
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/s_host.png HTTP/1.1" 200 316
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/logo_right.png HTTP/1.1" 200 5658
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/s_asci.png HTTP/1.1" 200 254
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/item_ltr.png HTTP/1.1" 200 173
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/window-new.png HTTP/1.1" 200 583
127.0.0.1 - - [02/Dec/2008:09:42:49 +0100] "GET /phpmyadmin/themes/original/img/b_info.png HTTP/1.1" 200 234
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/b_newdb.png HTTP/1.1" 200 408
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_process.png HTTP/1.1" 200 362
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_status.png HTTP/1.1" 200 313
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_reload.png HTTP/1.1" 200 245
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/b_engine.png HTTP/1.1" 200 362
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_vars.png HTTP/1.1" 200 306
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_rights.png HTTP/1.1" 200 512
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_db.png HTTP/1.1" 200 285
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/b_import.png HTTP/1.1" 200 310
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/b_export.png HTTP/1.1" 200 313
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_lang.png HTTP/1.1" 200 422
127.0.0.1 - - [02/Dec/2008:09:42:50 +0100] "GET /phpmyadmin/themes/original/img/s_theme.png HTTP/1.1" 200 737
127.0.0.1 - - [02/Dec/2008:09:42:57 +0100] "GET /phpmyadmin/index.php?db=testdb&token=607ffb00d35d07043baca5a9d4cea54c HTTP/1.1" 200 2321
127.0.0.1 - - [02/Dec/2008:09:42:57 +0100] "GET /phpmyadmin/navigation.php?db=testdb&token=607ffb00d35d07043baca5a9d4cea54c HTTP/1.1" 200 1720
127.0.0.1 - - [02/Dec/2008:09:42:58 +0100] "GET /phpmyadmin/themes/original/img/b_sbrowse.png HTTP/1.1" 200 197
127.0.0.1 - - [02/Dec/2008:09:42:57 +0100] "GET /phpmyadmin/db_structure.php?db=testdb&token=607ffb00d35d07043baca5a9d4cea54c HTTP/1.1" 200 3813
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_sql.png HTTP/1.1" 200 322
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_props.png HTTP/1.1" 200 294
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_search.png HTTP/1.1" 200 605
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_deltbl.png HTTP/1.1" 200 364
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_tipp.png HTTP/1.1" 200 308
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_relations.png HTTP/1.1" 200 280
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_select.png HTTP/1.1" 200 540
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_browse.png HTTP/1.1" 200 265
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_tblops.png HTTP/1.1" 200 345
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_empty.png HTTP/1.1" 200 298
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_insrow.png HTTP/1.1" 200 283
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/arrow_ltr.png HTTP/1.1" 200 277
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_drop.png HTTP/1.1" 200 311
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_tblanalyse.png HTTP/1.1" 200 296
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_print.png HTTP/1.1" 200 574
127.0.0.1 - - [02/Dec/2008:09:42:59 +0100] "GET /phpmyadmin/themes/original/img/b_newtbl.png HTTP/1.1" 200 409
Danke schonmal und voraus
Liebe Grüße