Hi,
ich bräuchte einen regulären Ausdruck, der es ermöglicht eine Standard-Apache Logfile im Format ...
11.68.82.38 - - [31/Aug/2003:04:13:18 -0400] "GET /en/contact HTTP/1.0" 200 29865
11.179.49.162 - - [31/Aug/2003:04:15:16 -0400] "GET /en/contact? HTTP/1.1" 200 29933
11.179.49.162 - - [31/Aug/2003:04:15:16 -0400] "GET /stylesheets/global.css HTTP/1.1" 200 6443
11.179.49.162 - - [31/Aug/2003:04:15:17 -0400] "GET /scripts/global.js HTTP/1.1" 200 23274
11.179.49.162 - - [31/Aug/2003:04:15:17 -0400] "GET /stylesheets/global.css HTTP/1.1" 200 6443
11.179.49.162 - - [31/Aug/2003:04:15:18 -0400] "GET /scripts/global.js HTTP/1.1" 200 23274
(mehrere Beispiele!!)
nach ihren Werte zu Splitten.
Im Prinzip ist die Aufgabe ja ganz einfach, da alle Werte leicht zu trennen sind. Der Ausdruck ...
(\S+)\s(\S+)\s(\S+)\s[(\d{2})/(\w{3})/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s([+-]?\d{4})]\s"(\S+)\s(\S+)\s(\S+)"\s(\S+)\s(\S+)
brachte mir da schon die Einzelstücke wieder:
1 => Host
2 => User
3 => Client
4 => Tag
5 => Monat
6 => Jahr
7 => Stunde
8 => Minute
9 => Sekunde
10 => Requesttyp
11 => URL
12 => Status
13 => Bytes
PROBLEM war aber, dass bei manchen Zeilen der Requesttyp und der Status komplett fehlen (!!!) - Woher das kommt, weiß ich nicht. Ist das ein Fehler oder kennt jemand einen eindeutigen REGEX für Apache Logfiles? Ich bräuchte dringend eines für eine nachträgliche Analyse, die über ein Script laufen soll, um den Provider zu kontrollieren.
Grüße
Stefan