#!/local/bin/perl5 # # splitlog.pl Version 1.1 # Dieses Skript verwaltet die Ausgaben in den Web-Logfiles. # Die Zugriffe werden vom Webserver anstelle auf eine File access.log # auf diese Datei gepiped, welche dann die Zugriffe analysiert, und # in die jeweils richtigen Files weiterleitet. # # Damit der Webserver auf dieses Skript, anstelle auf einer Datei piped, # muss in der httpd.conf der Eintrag hinter der Variable TransferLog # geaendert werden: # # TransferLog "| /pfad/zu/diesem/skript/splitlog.pl" # # Dies funktioniert natuerlich auch fuer die ErrorLog. # # Die Dateinamen, in der Variablen aus vom Webserver gepipt werden, # werden im folgenden Array festgelegt. # Die Syntax ist bei neuen Eintraegen streng einzuhalten! # # 29. April 1998, Wolfgang Wiese, unrzc9 ######################################################################## $LOGPATH = "/home/rzsunhome/unrz/unrzc9/test/log/"; # Der Pfad, in dem die Logfiles residieren. $NORMALLOG = $LOGPATH."access.log"; # Die File, in der alles reingeht, was nicht einzuordnen war $SEARCHFLAG = 0; # 0: Suche in URLs, 1: Suche in Stati # $URLSEARCH{'/RRZE'} = $LOGPATH."access-rrze.log"; $URLSEARCH{'/docs/RRZE'} = $LOGPATH."access-rrze.log"; $URLSEARCH{'/docs/FAUWWW'} = $LOGPATH."access-fau.log"; $URLSEARCH{'/~'} = $LOGPATH."access-home.log"; $URLSEARCH{'/cgi-bin'} = $LOGPATH."access-cgi.log"; $URLSEARCH{'/etc/passwd'} = $LOGPATH."access-attack.log"; # Die Suchwoerter, und die Pfade, in denen Sie hineingeschrieben werden. # Nur URLs werden durchsucht! $STATUSSEARCH{'200'} = $LOGPATH."access-200.log"; $STATUSSEARCH{'302'} = $LOGPATH."access-proxy.log"; $STATUSSEARCH{'304'} = $LOGPATH."access-proxy.log"; $STATUSSEARCH{'400'} = $LOGPATH."access-error.log"; $STATUSSEARCH{'206'} = $LOGPATH."access-proxy.log"; $STATUSSEARCH{'404'} = $LOGPATH."access-error.log"; $STATUSSEARCH{'500'} = $LOGPATH."access-error.log"; # Falls nicht nach URLs, aber nach Stati gesucht werden soll. ############ Ab hier geht es los while(<>) { chop($_); ($host, $identd, $user, $date, $request, $URL, $status, $bytes) = /^(\S+) (\S+) (\S+) \[([^]]+)\] "(\w+) (\S+).*" (\d+) (\S+)/; $else=1; if ($SEARCHFLAG==0) { foreach $key (keys %URLSEARCH) { if ($URL =~ /$key/i) { open(f1,">>$URLSEARCH{$key}"); print f1 "$_\n"; close f1; $else=0; } } } else { foreach $key (keys %STATUSSEARCH) { if ($status =~ /$key/i) { open(f1,">>$STATUSSEARCH{$key}"); print f1 "$_\n"; close f1; $else=0; } } } if ($else) { open(f2,">>$NORMALLOG"); print f2 "$_\n"; close f2; } } exit;