www.ProFTPD.de
13. März 2007, 18:21:15 *
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: SMF - Neu installiert!
 
   Übersicht   Hilfe Suche Login Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Logformat / Daily Log mit Fifo's  (Gelesen 971 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Claus
ProFTPD
*
Offline Offline

Beiträge: 44


137219665
Profil anzeigen WWW E-Mail
« am: 15. Mai 2003, 22:23:43 »

Ein Codeschnipsel zur Erstellung von Daily Log's.
Auf Basis von FIFO's (named pipes) Siehe man mkfifo.
Voraussetzung ist das Vorhandensein einer Fifo Datei.
In diesem Beispiel 'proftpd_log.fifo'
Das Logformat in der proftpd.conf sieht wie folgt aus.
LogFormat default "IP|%a|CMD|%m|CMDLine|%r|USR|%u|TIME|%{%F %T}t|FileN|%f|CODE|%s"
In dieser Variante werden "Schlüssel" mitgegeben (Nicht für ein "Daily Log" notwendig).
Die Übergabe in der conf
ExtendedLog /usr/local/proftpd/var/log/proftpd_log.fifo ALL default
Hier wird als Logdatei die Fifodatei angegeben.
Wer kein Perl hat kann es sicher auch zu einem Shellscript umbauen.


Code:

#!/usr/bin/perl
#######################################################################
#Script wertet das Logformat vom Proftpd das in eine Fifo
#umgeleitet wurde aus und erstellt ein Log mit dem Dateinamen
#des Aktuellen Tages.
#Darüber hinaus wird in diesem Codeschnipsel die Übergabe
#der Logvariablen mit Schlüsseln in ein Hash übergeben.
#Über die Schlüssel angesprochen werden die Werte
#in Variablen gespeichert die zu einer weiteren Verarbeitung
#dienen können.
#######################################################################

#Pfad zur FIFO
$LogFifo = '/usr/local/proftpd/var/log/proftpd_log.fifo';

$i = 1;

while ($i ==1) {
       #---------------------------------------------------------------
       #Hier "lauscht" das Script auf Logfile Daten vom Proftpd.
       #Sind welche vorhanden werden diese zeilenweise in $GetString
       #eingelesen.
       open FIFO, "<$LogFifo" or die "can't read $LogFifo: $!";
       $GetString = <FIFO>;
       
       #----------------------------------------------------------------
       
       #While Schleife prüft bei gefülltem $GetString auf String "stop",
       #dieser kann manuell an das FIFO gesendet werden um das Script
       #sauber zu beenden.
       while($GetString ne ''){
             $hit = index($GetString,"stop");
                    if($hit != -1){
                       $i=2;
                    }
       #--------------------------------------------------------------------
       
             #--------------------------------------------------------------
             #Das Hash wird mit den entsprechenden Infos vom Proftpd gefüllt.
             #Hierbei werden, die in der Conf definierten Schlüssel dem Hash
             #ebenfalls als Schlüssel übergeben.      
             %Arr = split('\|',$GetString);
             #--------------------------------------------------------------
             
             #--------------------------------------------------------------
             #Dieser Block übergibt an die benötigeten Variablen zur weiteren
             #Verarbeitung die Werte aus dem Hash.
             $User = $Arr{USR};
             $Zeit = $Arr{TIME};
             $CmdLine = $Arr{CMDLine};
             $ClientIP = $Arr{IP};
             $Cmd = $Arr{CMD};
             $FileName = $Arr{FileN};
             $Code = $Arr{CODE};
             $timestmp = &getDate; #Aktuelles Datum ermitteln.
             #---------------------------------------------------------------
             
             #---------------------------------------------------------
             #Das ganze wird in ein Log das als Dateiname das
             #Aktuellem Datum hat geschrieben.
             #z.b. 15052003
             open(LOGFILE,">>/usr/local/proftpd/var/log/$timestmp");
                  print LOGFILE $GetString;
             $GetString = <FIFO>;
}
    close LOGFILE;
    #---------------------------------------------------------
 close FIFO;
 
 sleep 1;
}


##############################################################################
#---Start Prozeduren und Funktionen
##############################################################################
sub getDate{
    $jahr = (1900+(localtime)[5]);
    $monat = sprintf("%02d",(localtime)[4]+1);
    $tag = sprintf("%02d",(localtime)[3]);
    $AktDatum = $tag.".".$monat.".".$jahr;
    return($AktDatum);
}
Gespeichert

#################################
support your local
#################################
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS
Seite erstellt in 0.05 Sekunden mit 18 Zugriffen.