SlideShare une entreprise Scribd logo
1  sur  78
Télécharger pour lire hors ligne
Einleitung Grundlagen Stealth-Logger Resourcen Fragen




                              Easy Logging
                  Einf¨hrung in Log::Log4perl qw/:easy/
                      u

                                             Thomas Fahle


                    FrOSCon 2011, St. Augustin, 21. August 2011




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   ¨         ¨
                                                        Ubersicht Uber Log::Log4perl

¨
Uber diesen Vortrag


     Einf¨hrung in Log::Log4perl
         u
          Log::Log4perl Grundlagen
          Easy Mode - Stealth-Logger
                   Basics
                   Datenstrukturen
                   Appender
                   Packages
                   Performance
            Resourcen im Netz - Mehr Infos

     Slides online
     http://www.slideshare.net/thomasfahle



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   ¨         ¨
                                                        Ubersicht Uber Log::Log4perl




     Log::Log4perl?
          Port von log4j
            Author: Michael Schilli
            sehr ausgereiftes Logging-Framework (Profil¨sung)
                                                      o
            Umfangreiche, komplette, aber oft verwirrende Dokumentation




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   ¨         ¨
                                                        Ubersicht Uber Log::Log4perl




     Log::Log4perl
          liefert Information aus dem tats¨chlichen Betrieb des
                                          a
          Programms
            durch Konfigurationsdateien k¨nnen Loggingstatements, die
                                         o
            eigentlich zum Testen/Debuggen gedacht sind im
            ausgeliefertem Code verbleiben
            Ausgabeziele und Formate k¨nnen uber Konfigurationsdateien
                                      o     ¨
            unterschiedlichen Umgebungen und Bed¨rfnissen angepasst
                                                 u
            werden.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   ¨         ¨
                                                        Ubersicht Uber Log::Log4perl

Log::Log4perl Betriebsmodi




     Log::Log4perl kennt zwei Betriebsmodi
          Standardmodus: Sehr sehr viele fein granulierte Optionen
            Easy Mode oder Stealth Logger: komfortables, einfaches
            Loggen, eben EASY.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨ten
       a




     Priorit¨ten oder Loglevel
            a
     (lat. prior = der Vordere) legen die Wichtigkeit eines
     Loggingereignisses fest.
     Ob ein Logger die ihm ubergebenen Nachrichten tats¨chlich
                             ¨                            a
     weitergibt oder unterdr¨ckt, wird in der Konfiguration festgelegt.
                             u




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Vordefinierte Priorit¨ten
                    a


     Log::Log4perl stellt sechs vordefinierte Loglevel zur Verf¨gung
                                                              u
     Die Level in absteigender Reihenfolge:
            FATAL
            ERROR
            WARN
            INFO
            DEBUG
            TRACE
     Zus¨tzlich wird auch das Pseudolevel ALWAYS bereitgestellt.
        a




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t TRACE
       a



     TRACE
     Das Level TRACE kennzeichnet sehr, sehr feink¨rnige Ereignisse -
                                                  o
     feink¨rniger als das n¨chste Level DEBUG.
          o                a

     Beispiel:

     TRACE( ” $ b y t e s b y t e s t r a n s f e r r e d ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t DEBUG
       a



     DEBUG
     Das Level DEBUG kennzeichnet feink¨rnige Ereignisse, die n¨tzlich
                                         o                     u
     sind, um eine Applikation zu debuggen.

     Beispiel:

    DEBUG( ”HTTP GET r e q u e s t OK” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t INFO
       a



     INFO
     Das Level INFO kennzeichnet grobk¨rnige Ereignisse, die uber den
                                       o                     ¨
     Fortschritt des Programms informieren.

     Beispiel:

     INFO ( ” S t a r t e $0 ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t WARN
       a



     WARN
     Das Level WARN kennzeichnet Ereignisse, die auf kleine Fehler
     hinweisen. Das Programm kann aber weiterlaufen.

     Beispiel:

    WARN( ”HTTP GET f a i l e d , r e t r y i n g ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t ERROR
       a



     ERROR
     Das Level ERROR kennzeichnet Ereignisse, die auf gr¨ßere Fehler
                                                        o
     hinweisen. Das Programm kann aber oft noch weiterlaufen.

     Beispiel:

     ERROR( ”Out o f r e t r i e s ! ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t FATAL
       a



     FATAL
     Das Level FATAL kennzeichnet Ereignisse, die auf schwerwiegende
     Fehler hinweisen. Das Programm wird meist beendet werden
     m¨ssen.
       u

     Beispiel:

     FATAL( ”Can ’ t c o n n e c t t o d a t a b a s e . ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Priorit¨t ALWAYS
       a



     ALWAYS
     Das Level ALWAYS kennzeichnet Ereignisse, die immer geloggt
     werden sollen. Sie werden niemals geblockt.

     Beispiel:

    ALWAYS( ” T h i s w i l l be p r i n t e d r e g a r d l e s s
              of the log l e v e l . ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Konfiguration Priorit¨t
                    a




     Konfiguration
         entscheidet, wie sich ein Logger verh¨lt.
                                              a
            d.h. ob wie wohin geloggt wird.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen     Priorit¨ten Appender Layouts
                                                                 a

Konfiguration und Priorit¨t
                        a


                                   Priorit¨t
                                          a             Konfiguration
                                   FATAL                FATAL
                                   ERROR                ERROR
                                   WARN                 WARN
                                   INFO                 INFO
                                   DEBUG                DEBUG
                                   TRACE                TRACE


     Priorit¨t und Konfiguration
            a
     Zu jeder Priorit¨t im Programm geh¨rt eine entsprechende
                      a                o
     Priorit¨t in der Konfiguration.
            a



                                        Thomas Fahle      Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                           u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Beispiel: Konfiguriertes Level WARN


                              Priorit¨t
                                     a          Konfiguriertes Level
                              FATAL             +
                              ERROR             +
                              WARN              WARN
                              INFO              -
                              DEBUG             -
                              TRACE             -


     Konfiguriertes Level WARN
         Nachrichten unterhalb von WARN werden nicht ausgegeben.
            Nachrichten der Priorit¨t WARN oder h¨her werden
                                   a             o
            ausgegeben.


                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Beispiel: Konfiguriertes Level ERROR


                              Priorit¨t
                                     a          Konfiguriertes Level
                              FATAL             +
                              ERROR             ERROR
                              WARN              -
                              INFO              -
                              DEBUG             -
                              TRACE             -


     Konfiguriertes Level ERROR
         Nachrichten unterhalb von ERROR werden nicht ausgegeben.
            Nachrichten der Priorit¨t ERROR oder h¨her werden
                                   a              o
            ausgegeben.


                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Beispiel: Konfiguriertes Level DEBUG


                              Priorit¨t
                                     a          Konfiguriertes Level
                              FATAL             +
                              ERROR             +
                              WARN              +
                              INFO              +
                              DEBUG             DEBUG
                              TRACE             -


     Konfiguriertes Level DEBUG
         Nachrichten unterhalb von DEBUG werden nicht ausgegeben.
            Nachrichten der Priorit¨t DEBUG oder h¨her werden
                                   a              o
            ausgegeben.


                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Appender




     Appender/Datensenken
     Appender sind Datensenken, in die Log-Nachrichten geschrieben
     werden.
     Als Datensenke l¨sst sich von der einfachen Bildschirmausgabe
                     a
     (STDERR) uber Logdateien, Syslog, SMS- oder
                ¨
     E-Mail-Benachrichtigung, bis hin zu Datenbanken, so ziemlich alles
     verwenden, was man sich als Ausgabe-Medium vorstellen kann.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Log::Log4perl Appender



     Log::Log4perl Appender (Auswahl)
            Log::Log4perl::Appender::Screen
            Log::Log4perl::Appender::File
            Log::Log4perl::Appender::Socket
            Log::Log4perl::Appender::DBI
            Log::Log4perl::Appender::Synchronized
            Log::Log4perl::Appender::RRDs




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Log::Dispatch Appender


     Log::Dispatch Appender (Auswahl)
            Log::Dispatch::ApacheLog
            Log::Dispatch::DBI
            Log::Dispatch::Email
            Log::Dispatch::Email::MIMELite
            Log::Dispatch::File
            Log::Dispatch::FileRotate
            Log::Dispatch::Screen
            Log::Dispatch::Syslog
            u.v.a.m. ...



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Layouts




     Layouts - Informationsumfang
         Layouts formatieren Log-Nachrichten und legen den
         Informationsumfang fest.
            Log-Nachrichten k¨nnen in einer printf()-¨hnlichen Syntax
                               o                     a
            einfach an die eigenen Bed¨rfnisse angepasst (formatiert)
                                      u
            werden.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Layouts


     Layouts - Formatierungsanweisungen 1
            %c Category of the logging event.
            %C Fully qualified package (or class) name of the caller
            %d Current date in yyyy/MM/dd hh:mm:ss format
            %F File where the logging event occurred
            %H Hostname (if Sys::Hostname is available)
            %l Fully qualified name of the calling method followed by the
            callers source the file name and line number between
            parentheses.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Priorit¨ten Appender Layouts
                                                               a

Layouts

     Layouts - Formatierungsanweisungen 2
            %T A stack trace of functions called
            %L Line number within the file where the log statement was
            issued
            %m The message to be logged
            %M Method or function where the logging request was issued
            %n Newline (OS-independent)
            %p Priority of the logging event
            %P pid of the current process
            %r Number of milliseconds elapsed from program start to
            logging
            %% A literal percent (%) sign

                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Easy Mode (Stealth Logger)




     qw/:easy/

1   #! / u s r / b i n / p e r l
2   use s t r i c t ;
3   use warnings ;
4

5    u s e Log : : L o g 4 p e r l qw / : e a s y / ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Automatisch importierte Funktionen qw/:easy/



     Level/Priortit¨ten
                   a
            FATAL
            ERROR
            WARN
            INFO
            DEBUG
            TRACE




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Automatisch importierte Funktionen qw/:easy/



     Convenience: Log and ...
         LOGWARN
            LOGDIE
            LOGEXIT
            LOGCARP
            LOGCLUCK
            LOGCROAK
            LOGCONFESS




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Automatisch importierte Konstanten qw/:easy/



     Level/Priortit¨ten
                   a
            $FATAL
            $ERROR
            $WARN
            $INFO
            $DEBUG
            $TRACE




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Easy Mode initialisieren 1




     easy init()

1   #! / u s r / b i n / p e r l
2   use s t r i c t ;
3   use warnings ;
4   u s e Log : : L o g 4 p e r l qw / : e a s y / ;
5   Log : : L o g 4 p e r l −> e a s y i n i t ( ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Easy Mode initialisieren 2




     easy init()
            initialisiert einen einfachen Logger.
            Der Appender ist vom Typ SCREEN, d.h. die Log-Nachrichten
            erscheinen auf STDERR.
            Das Layout der Nachrichten wird auf das Format ”%d
            %m%n”gesetzt.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Hallo Welt im Easy Mode

     Hallo Welt!

1    u s e Log : : L o g 4 p e r l qw / : e a s y / ;
2    Log : : L o g 4 p e r l −> e a s y i n i t ( ) ;
3    INFO ( ” S t a r t e $0 ” ) ;
4    p r i n t ” H a l l o Welt !  n” ;
5    INFO ( ” Beende $0 ” ) ;


     Ausgabe

1    2011/08/20 1 5 : 3 1 : 2 1 S t a r t e h a l l o w e l t . p l
2    H a l l o Welt !
3    2011/08/20 1 5 : 3 1 : 2 1 Beende h a l l o w e l t . p l



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Loglevel im Easy Mode konfigurieren




     Priorit¨t/Level DEBUG
            a

1    u s e Log : : L o g 4 p e r l qw / : e a s y / ;
2    Log : : L o g 4 p e r l −> e a s y i n i t ( {
3                               l e v e l => $DEBUG ,
4                             } );




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Layout im Easy Mode konfigurieren

     Layout

1    u s e Log : : L o g 4 p e r l qw / : e a s y / ;
2    Log : : L o g 4 p e r l −> e a s y i n i t ( {
3                               l e v e l => $DEBUG ,
4                               l a y o u t =>
5                                  ’%d [%M] %F %L> % %n ’ , } ) ;
                                                      m


     Ausgabe

1    2011/08/20 1 6 : 2 7 : 3 6 [ main : : ]                hallowelt . pl 
2         10> S t a r t e h a l l o w e l t . p l
3    H a l l o Welt !
4    2011/08/20 1 6 : 2 7 : 3 6 [ main : : ]                hallowelt . pl 
5         12> Beende h a l l o w e l t . p l

                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Ausgabemedium im Easy Mode konfigurieren


     Ausgabe in eine Datei

1    u s e Log : : L o g 4 p e r l qw / : e a s y / ;
2    Log : : L o g 4 p e r l −> e a s y i n i t ( {
3                               l e v e l => $DEBUG ,
4                               l a y o u t =>
5                                  ’%d [%M] %F %L> % %n ’ ,    m
6                               f i l e =>
7                                  ’>> . / t e s t . l o g ’ ,
8     } );




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Skalare Variablen


     Skalare Variablen werden wie gewohnt expandiert

1    my $ c o u n t e r = 0 ;
2      # Double Quotes
3      DEBUG( ” C o u n t e r $ c o u n t e r ” ) ;


     Tipp: Begrenzer um Variablen setzen

1    my $ c o u n t e r = 0 ;
2      # Double Quotes
3      DEBUG( ” C o u n t e r <$ c o u n t e r >” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Konstanten




     Bei Konstanten kommt der Verkettungsoperator . zum Einsatz.

1    u s e c o n s t a n t PI => 4 ∗ a t a n 2 ( 1 , 1 ) ;
2       DEBUG( ” K o n s t a n t e PI ” . PI . ” . . . ” ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Arrays, Hashes und komplexe Datenstrukturen




     Data::Dumper to the rescue
         Arrays, Hashes und komplexe Datenstrukturen lassen sich
         meist nur sinnvoll mit Data::Dumper loggen.
            Data::Dumper in Version 2.09 ist seit Perl 5.005 ein
            Coremodule.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Kleine Arrays

     Kleine Arrays - Expansion

1    sub f o o {
2      DEBUG( ” P a r a m e t e r : @ ” ) ;
3    }


     Kleine Arrays - foreach

1    my @ a r r a y = 1 . . 1 0 ;
2    f o r e a c h my $ e l e m e n t ( @ a r r a y ) {
3       DEBUG( ” A r r a y e l e m e n t : <$ e l e m e n t >” ) ;
4    }



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Arrays




     Arrays (langsam) dumpen

1   u s e Data : : Dumper ;
2   # turn o f f a l l pretty print
3   $Data : : Dumper : : I n d e n t = 0 ;
4   my @ a r r a y = 1 . . 1 0 ;
5   TRACE( ” A r r a y : ” , Dumper (  @ a r r a y ) ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Kleine Hashes


     Kleine Hashes - Expansion

1   my %h as h ;
2   DEBUG( ” Hash @ { [ %h a s h ] } ” ) ;


     Kleine Hashes - while

1    w h i l e ( my ( $key , $ v a l u e ) = e a c h %h a s h ) {
2     DEBUG( ” Hash : Key <$key> V a l u e <$ v a l u e >” ) ;
3    }




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Hashes




     Hashes (langsam) dumpen

1   u s e Data : : Dumper ;
2   # turn o f f a l l pretty print
3   $Data : : Dumper : : I n d e n t = 0 ;
4   my %h as h ;
5   TRACE( ” Hash : ” , Dumper ( %h a s h ) ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Need for Speed - message output filter format


     Arrays

1    TRACE( ” A r r a y : ” , {
2             f i l t e r => &Data : : Dumper : : Dumper ,
3             v a l u e =>  @ a r r a y } ) ;


     Hashes

1    TRACE( ” Hash : ” , {
2             f i l t e r => &Data : : Dumper : : Dumper ,
3             v a l u e => %h a s h } ) ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Message output filter format



     Message output filter format
         Log::Log4perl wird die filter Funktion, erst dann aufrufen,
         wenn die Nachricht wirklich in einen Appender geschrieben
         wird.
            Die filter Funktion erwartet eine Referenz auf ein
            Unterprogramm, welches den Dump ausf¨hrt, und eine
                                                    u
            Referenz auf die zu loggende Datenstruktur.
            Spart sp¨rbar Rechenzeit und Hauptspeicher.
                    u




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Dump Profiling

     Beispielprogramm

 1   my %h as h = ( ) ;
 2   f o r ( 1 . . 10 0 0 0 ) {
 3         $ has h { $ } = 1 ;
 4   }
 5

 6   w h i l e ( my ( $key , $ v a l u e ) = e a c h %h a s h ) {
 7           TRACE( ” Hash : Key <$key> V a l u e <$ v a l u e >” ) ;
 8   }
 9   TRACE( ” Hash : ” , Dumper ( %h a s h ) ) ;
10   TRACE( ” Hash : ” , {
11               f i l t e r => &Data : : Dumper : : Dumper ,
12              v a l u e => %h a s h } ) ;


                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Dump Profiling - Konfiguriertes Level TRACE


     Konfiguriertes Level TRACE
     d.h., es soll geloggt werden.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Dump Profiling - Konfiguriertes Level INFO


     Konfiguriertes Level INFO
     d.h., es soll nicht geloggt werden.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Konfiguration Appender




     Konfiguration
         entscheidet, wie sich ein Logger verh¨lt.
                                              a
            d.h. ob wann wie wohin geloggt wird.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Easy Mode aus Konfigurationsdatei initialisieren



     init()

1   #! / u s r / b i n / p e r l
2   use s t r i c t ;
3   use warnings ;
4   u s e Log : : L o g 4 p e r l qw / : e a s y / ;
5   Log : : L o g 4 p e r l −> i n i t ( ’ l 4 p . c o n f ’ )
6         or die $ ! ;




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen    Basics Datenstrukturen Appender Packages Performance

Konfigurationsdatei Beispiel


     Log::Log4perl Konfigurationsdatei

1    log4perl . logger                                                = TRACE, A1
2    l o g 4 p e r l . a p p e n d e r . A1 
3         = Log : : D i s p a t c h : : F i l e
4    l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e         = ./ test . log
5    l o g 4 p e r l . a p p e n d e r . A1 . mode                    = append
6    l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 
7         = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
8    l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 
9         = %d %p> %F{1}:%L % − % %n            M         m




                                        Thomas Fahle     Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                          u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Fehlende Konfigurationsdateien 1


     Try

1    u s e Log : : L o g 4 p e r l qw / : e a s y / ;
2    my $ l o g 4 p c f g f i l e = ’ /tmp/XXXXX . c f g ’ ;
3

4   # t r y to i n i t with a c o n f i g f i l e
5   eval {
6         Log : : L o g 4 p e r l −> i n i t ( $ l o g 4 p c f g f i l e )
7           or die ” Error $ l o g 4 p c f g f i l e − $ ! ” ;
8   };




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Fehlende Konfigurationsdateien 2


     Catch:

 1   # c a t c h e r r o r s from i n i t and u s e a s i m p l e
 2   # c o n f i g u r a t i o n , s e n d i n g e v e r y message t o
 3   # STDERR
 4   i f ( $@ ) {
 5       Log : : L o g 4 p e r l −> e a s y i n i t ( {
 6            ’ l e v e l ’ => $DEBUG ,
 7            ’ l a y o u t ’ => ”%d %p> %F { 1 } : %L % − % %n” ,
                                                                M      m
 8         } );
 9       WARN( ” F a l l i n g back t o e a s y c o n f i g u r a t i o n ! ” ) ;
10   }



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

init once - nur ein einziges Mal initialisieren



     init once() - Nur initialisieren, falls noch nicht initialisiert

1   # I n i t o r s k i p i f a l r e a d y done
2   Log : : L o g 4 p e r l −>i n i t o n c e ( $ l o g 4 p c f g f i l e ) ;


     mod perl
     Entweder in der startup.pl initialisieren oder init once() verwenden.




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

init and watch - Konfiguration im laufendem Betrieb
¨ndern.
a


     init and watch() - zeitgesteuert.

1    my $ d e l a y = 3 0 0 ; # s e c o n d s
2    Log : : L o g 4 p e r l −>i n i t a n d w a t c h (
3      $ l o g 4 p c f g f i l e , $delay );


     init and watch() - signalgesteuert.

1    Log : : L o g 4 p e r l −>i n i t a n d w a t c h (
2      $ l o g 4 p c f g f i l e , ’HUP ’ ) ;



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Logdateien rotieren

     Log::Log4perl Konfigurationsdatei

 1   log4perl . logger                                        = TRACE, A1
 2   # Appender A1
 3   l o g 4 p e r l . a p p e n d e r . A1
     = Log : : D i s p a t c h : : F i l e R o t a t e
 4   l o g 4 p e r l . a p p e n d e r . A1 . max             = 10
 5   l o g 4 p e r l . a p p e n d e r . A1 . s i z e         = 20 0 0 0
 6   l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g
 7   l o g 4 p e r l . a p p e n d e r . A1 . mode            = append
 8   l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t      
 9        = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
10   l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 
11        = %d %p> %F{1}:%L % − % %n            M         m



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Logs per E-Mail versenden

     Log::Log4perl Konfigurationsdatei

1   log4perl . logger                                       = TRACE, M a i l e r
2   l o g 4 p e r l . appender . Mailer
    = Log : : D i s p a t c h : : E m a i l : : M a i l S e n d
3   l o g 4 p e r l . appender . Mailer . to
    = your@email . address
4   l o g 4 p e r l . appender . Mailer . s u b j e c t
    = My Program N o t i c e
5   l o g 4 p e r l . appender . Mailer . b u f f e r e d = 1
6   l o g 4 p e r l . appender . Mailer . l a y o u t                
7      = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
8   l o g 4 p e r l . appender . Mailer . l a y o u t . ConversionPattern 
9      = %d %p> %F{1}:%L % − % %n       M         m



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Logdateien rotieren und FATALs per E-Mail versenden 1

     Log::Log4perl Konfigurationsdatei 1

 1   log4perl . logger                                        = TRACE, A1 , M a i l e r
 2   # Appender A1
 3   l o g 4 p e r l . a p p e n d e r . A1        
 4        = Log : : D i s p a t c h : : F i l e R o t a t e
 5   l o g 4 p e r l . a p p e n d e r . A1 . max             = 10
 6   l o g 4 p e r l . a p p e n d e r . A1 . s i z e         = 20 0 0 0
 7   l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g
 8   l o g 4 p e r l . a p p e n d e r . A1 . mode            = append
 9   l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t      
10        = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
11   l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 
12        = %d %p> %F{1}:%L % − % %n            M         m



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Logdateien rotieren und FATALs per E-Mail versenden 2

     Log::Log4perl Konfigurationsdatei 2

 1   # Mailer
 2   l o g 4 p e r l . appender . Mailer 
 3        = Log : : D i s p a t c h : : E m a i l : : M a i l S e n d
 4   l o g 4 p e r l . appender . Mailer . to 
 5        = your@email . address
 6   l o g 4 p e r l . appender . Mailer . s u b j e c t 
 7        = My Program N o t i c e
 8   l o g 4 p e r l . appender . Mailer . b u f f e r e d = 1
 9   l o g 4 p e r l . appender . Mailer . m i n l e v e l = f a t a l
10   l o g 4 p e r l . appender . Mailer . l a y o u t                
11        = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
12   l o g 4 p e r l . appender . Mailer . l a y o u t . ConversionPattern 
13        = %d %p> %F{1}:%L % − % %n       M         m



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Syslog


     Log::Log4perl Konfigurationsdatei

1    log4perl . logger                                                = TRACE, S y s l o g
2
3   l o g 4 p e r l . appender . Syslog
    = Log : : D i s p a t c h : : S y s l o g
4   l o g 4 p e r l . appender . Syslog . i d e n t                = MyIdent
5   l o g 4 p e r l . appender . Syslog . f a c i l i t y = user
6   l o g 4 p e r l . appender . Syslog . l a y o u t              
7        = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
8   l o g 4 p e r l . appender . Syslog . l a y o u t . ConversionPattern 
9        = %d %p> %F{1}:%L % − % %n        M        m




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Loggen in eine Datenbank 1

     Datenbank und Loggingtabelle erstellen

 1   create database logs ;
 2   u l o g s
 3   create table L (
 4    i d BIGINT u n s i g n e d AUTO INCREMENT NOT NULL ,
 5    d a t e DATETIME ,
 6    l o g l e v e l VARCHAR( 2 0 ) ,
 7    c a t e g o r y VARCHAR( 2 5 5 ) ,
 8    f i l e VARCHAR( 2 5 5 ) ,
 9    l i n e INT ( 1 0 ) UNSIGNED ,
10    message TEXT,
11    PRIMARY KEY( i d ) ) ;



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Loggen in eine Datenbank 2


     Log::Log4perl Konfigurationsdatei 1

1    log4perl . logger                                            = TRACE, DB
2    l o g 4 p e r l . a p p e n d e r .DB                        = 
3        Log : : L o g 4 p e r l : : Appender : : DBI
4    l o g 4 p e r l . a p p e n d e r .DB. l a y o u t           = 
5      Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t
6    l o g 4 p e r l . a p p e n d e r .DB. d a t a s o u r c e = 
7        DBI : m y s q l : l o g s : l o c a l h o s t
8    l o g 4 p e r l . a p p e n d e r .DB. username              = loguser
9    l o g 4 p e r l . a p p e n d e r .DB. p a s s w o r d       = geheym




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Loggen in eine Datenbank 3


     Log::Log4perl Konfigurationsdatei 2

 1   l o g 4 p e r l . a p p e n d e r .DB. s q l                   = insert into L 
 2     ( d at e , l o g l e v e l , c a t e g o r y , f i l e , l i n e , message ) 
 3       VALUES ( ? , ? , ? , ? , ? , ? )
 4   l o g 4 p e r l . a p p e n d e r .DB. params . 1              = %d
 5   l o g 4 p e r l . a p p e n d e r .DB. params . 2              = %p
 6   l o g 4 p e r l . a p p e n d e r .DB. params . 3              = %c
 7   l o g 4 p e r l . a p p e n d e r .DB. params . 4              = %F
 8   l o g 4 p e r l . a p p e n d e r .DB. params . 5              = %L
 9   l o g 4 p e r l . a p p e n d e r .DB. params . 6              =%   m
10   # For e f f i c i e n c y s a k e l o g o n l y a f t e r n m e s s a g e s
11   #l o g 4 p e r l . a p p e n d e r .DB. b u f f e r S i z e = 3




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Loggen in eine XML-Datei


     Log::Log4perl Konfigurationsdatei

1    l o g 4 p e r l . l o g g e r = WARN, A1
2    l o g 4 p e r l . a p p e n d e r . A1 = 
3        Log : : L o g 4 p e r l : : Appender : : F i l e
4    l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = l o g . xml
5    l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 
6       = Log : : L o g 4 p e r l : : L a y o u t : : XMLLayout
7    l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . L o c a t i o n I n f o = TRUE
8    l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . E n c o d i n g = i s o 8 8 5 9 −1


     XML
     kann von Logviewern wie z.B. Chainsaw oder Lilith gelesen werden


                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Chainsaw




     Bildnachweis: http://logging.apache.org/chainsaw/index.html
                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Lilith




     Bildnachweis: http://sourceforge.net/projects/lilith/

                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Log::Lop4perl in Packages

     Packages

 1   p a c k a g e Foo ;
 2   use s t r i c t ;
 3   use warnings ;
 4   u s e Log : : L o g 4 p e r l qw / : e a s y / ;
 5

 6   sub f o o {
 7       my $ b a r = s h i f t @ ;
 8       DEBUG( ” F o o i n g <$bar>” ) ;
 9       # . . . do s o m e t h i n g
10   }
11   1;



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Log::Lop4perl in Packages


     In Packages
          wird nicht initialisiert
            wird nicht konfiguriert
            werden Log Priorit¨ten vergeben
                              a

     Stealth (engl. Heimlichkeit)
            Wenn ein Logger nicht durch ein Programm initialisiert wird,
            wird der Logging Code im Package nicht ausgef¨hrt.
                                                         u
            Das hat den Charme, das man auch Pakete Log::Log4perl
            f¨hig machen kann, ohne treibende Programme zu ¨nderen.
             a                                             a




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Workflow




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Basics Datenstrukturen Appender Packages Performance

Performance




     Je mehr geloggt wird, desto schlechter die Performance
         Loglevel WARN f¨r produktive Systeme
                          u
            Loglevel ERROR f¨r produktive Systeme mit hoher Last
                            u
            Spezielle Konfigurationen nutzen, falls spezielle Probleme
            gel¨st werden m¨ssen
               o           u
            Ein Profiler wie Devel::NYTProf ist hilfreich




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

RTFM



     Log::Log4perl wird mit umfangreicher Dokumentation ausgeliefert.
          The log4perl project – log4j for Perl
          http://mschilli.github.com/log4perl/
            Manual
            http://search.cpan.org/perldoc?Log::Log4perl
            FAQ
            http://search.cpan.org/perldoc?Log::Log4perl::FAQ




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

Artikel



     Michael Schilli
         Logging nach Bedarf mit Log::Log4perl - Wachsame Schl¨fer
                                                              a
         http://www.linux-magazin.de/heft_abo/ausgaben/
         2003/01/wachsame_schlaefer
            Retire your debugger, log smartly with Log::Log4perl! http:
            //www.perl.com/pub/a/2002/09/11/log4perl.html
            Praktisch jeder Artikel im Linux-Magazin - Entwicklung - Perl
            http://www.linux-magazin.de/Themengebiete/
            Entwicklung/Perl




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

Artikel


     Diverse Autoren
         brian d foy: Mastering Perl: Logging
         http://www252.pair.com/comdog/mastering_perl/
         Chapters/13.logging.html
            Horshack’s Log4perl Page
            http://lena.franken.de/perl_hier/log4perl.html
            Kennedy Clark: Using Catalyst with Log4perl
            http://www.catalystframework.org/calendar/2006/11
            Patrick H. Piper: 8 Useful Log::Log4perl Recipes
            http://netlinxinc.com/netlinx-blog/52-perl/
            126-eight-loglog4perl-recipes.html



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

Vortr¨ge
     a




     Michael Schilli
         Log4perl: the Only Logging System You’ll Ever Need -
         OSCON 2008
         http://mschilli.github.com/log4perl/l4p.ppt
            Talk at YAPC 2007 (Houston, TX) - Smart Logging with
            Log4perl: http://perlmeister.com/log4perl_yapc.html




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

Vortr¨ge
     a


     Diverse Autoren
         Madmongers - Logging
         http://www.madmongers.org/uploads/Mc/oB/
         McoBWGNx-nYiEpqQfYz4kA/logging---madmongers.pdf
            WebGUI TV - Logging
            http://www.webgui.org/wgtv/logging
            Ren´e B¨cker - Log::Log4perl (FrOSCon 2010)
               e a
            http://www.renee-baecker.de/vortraege.html
            Thomas Fahle - Log::Log4perl qw/:easy/
            http://www.slideshare.net/thomasfahle/
            loglog4perl-qweasy-presentation



                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   RTFM Vortr¨ge Artikel Recommended Readings
                                                                  a

log4j zum Vergleich



     log4j
          Ceki G¨lc¨ - Short introduction to log4j
                u u
          http://logging.apache.org/log4j/1.2/manual.html
            Apache log4jTM http://logging.apache.org/log4j/
            Vipan Singla - Don’t Use System.out.println! Use Log4j
            http://www.vipan.com/htdocs/log4jhelp.html
            Logback Project - intended as a successor to the popular log4j
            project - http://logback.qos.ch/




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Fragen Danke! Perl.org

Fragen?




     Fragen?
         Fragen!




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Fragen Danke! Perl.org

Vielen Dank!




     Danke!
         Vielen Dank!




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u
Einleitung Grundlagen Stealth-Logger Resourcen Fragen   Fragen Danke! Perl.org

Perl.org



     When you need Perl think Perl.org
        http://www.Perl.org
            http://learn.Perl.org
            http://blogs.Perl.org
            http://jobs.Perl.org

     Flexible & Powerful
          That’s why we love Perl!




                                        Thomas Fahle    Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/
                                                                         u

Contenu connexe

En vedette

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

En vedette (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Log4perl - Easy Logging - FrOSCon 2011

  • 1. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u Thomas Fahle FrOSCon 2011, St. Augustin, 21. August 2011 Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 2. Einleitung Grundlagen Stealth-Logger Resourcen Fragen ¨ ¨ Ubersicht Uber Log::Log4perl ¨ Uber diesen Vortrag Einf¨hrung in Log::Log4perl u Log::Log4perl Grundlagen Easy Mode - Stealth-Logger Basics Datenstrukturen Appender Packages Performance Resourcen im Netz - Mehr Infos Slides online http://www.slideshare.net/thomasfahle Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 3. Einleitung Grundlagen Stealth-Logger Resourcen Fragen ¨ ¨ Ubersicht Uber Log::Log4perl Log::Log4perl? Port von log4j Author: Michael Schilli sehr ausgereiftes Logging-Framework (Profil¨sung) o Umfangreiche, komplette, aber oft verwirrende Dokumentation Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 4. Einleitung Grundlagen Stealth-Logger Resourcen Fragen ¨ ¨ Ubersicht Uber Log::Log4perl Log::Log4perl liefert Information aus dem tats¨chlichen Betrieb des a Programms durch Konfigurationsdateien k¨nnen Loggingstatements, die o eigentlich zum Testen/Debuggen gedacht sind im ausgeliefertem Code verbleiben Ausgabeziele und Formate k¨nnen uber Konfigurationsdateien o ¨ unterschiedlichen Umgebungen und Bed¨rfnissen angepasst u werden. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 5. Einleitung Grundlagen Stealth-Logger Resourcen Fragen ¨ ¨ Ubersicht Uber Log::Log4perl Log::Log4perl Betriebsmodi Log::Log4perl kennt zwei Betriebsmodi Standardmodus: Sehr sehr viele fein granulierte Optionen Easy Mode oder Stealth Logger: komfortables, einfaches Loggen, eben EASY. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 6. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨ten a Priorit¨ten oder Loglevel a (lat. prior = der Vordere) legen die Wichtigkeit eines Loggingereignisses fest. Ob ein Logger die ihm ubergebenen Nachrichten tats¨chlich ¨ a weitergibt oder unterdr¨ckt, wird in der Konfiguration festgelegt. u Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 7. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Vordefinierte Priorit¨ten a Log::Log4perl stellt sechs vordefinierte Loglevel zur Verf¨gung u Die Level in absteigender Reihenfolge: FATAL ERROR WARN INFO DEBUG TRACE Zus¨tzlich wird auch das Pseudolevel ALWAYS bereitgestellt. a Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 8. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t TRACE a TRACE Das Level TRACE kennzeichnet sehr, sehr feink¨rnige Ereignisse - o feink¨rniger als das n¨chste Level DEBUG. o a Beispiel: TRACE( ” $ b y t e s b y t e s t r a n s f e r r e d ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 9. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t DEBUG a DEBUG Das Level DEBUG kennzeichnet feink¨rnige Ereignisse, die n¨tzlich o u sind, um eine Applikation zu debuggen. Beispiel: DEBUG( ”HTTP GET r e q u e s t OK” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 10. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t INFO a INFO Das Level INFO kennzeichnet grobk¨rnige Ereignisse, die uber den o ¨ Fortschritt des Programms informieren. Beispiel: INFO ( ” S t a r t e $0 ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 11. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t WARN a WARN Das Level WARN kennzeichnet Ereignisse, die auf kleine Fehler hinweisen. Das Programm kann aber weiterlaufen. Beispiel: WARN( ”HTTP GET f a i l e d , r e t r y i n g ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 12. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t ERROR a ERROR Das Level ERROR kennzeichnet Ereignisse, die auf gr¨ßere Fehler o hinweisen. Das Programm kann aber oft noch weiterlaufen. Beispiel: ERROR( ”Out o f r e t r i e s ! ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 13. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t FATAL a FATAL Das Level FATAL kennzeichnet Ereignisse, die auf schwerwiegende Fehler hinweisen. Das Programm wird meist beendet werden m¨ssen. u Beispiel: FATAL( ”Can ’ t c o n n e c t t o d a t a b a s e . ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 14. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Priorit¨t ALWAYS a ALWAYS Das Level ALWAYS kennzeichnet Ereignisse, die immer geloggt werden sollen. Sie werden niemals geblockt. Beispiel: ALWAYS( ” T h i s w i l l be p r i n t e d r e g a r d l e s s of the log l e v e l . ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 15. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Konfiguration Priorit¨t a Konfiguration entscheidet, wie sich ein Logger verh¨lt. a d.h. ob wie wohin geloggt wird. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 16. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Konfiguration und Priorit¨t a Priorit¨t a Konfiguration FATAL FATAL ERROR ERROR WARN WARN INFO INFO DEBUG DEBUG TRACE TRACE Priorit¨t und Konfiguration a Zu jeder Priorit¨t im Programm geh¨rt eine entsprechende a o Priorit¨t in der Konfiguration. a Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 17. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Beispiel: Konfiguriertes Level WARN Priorit¨t a Konfiguriertes Level FATAL + ERROR + WARN WARN INFO - DEBUG - TRACE - Konfiguriertes Level WARN Nachrichten unterhalb von WARN werden nicht ausgegeben. Nachrichten der Priorit¨t WARN oder h¨her werden a o ausgegeben. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 18. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Beispiel: Konfiguriertes Level ERROR Priorit¨t a Konfiguriertes Level FATAL + ERROR ERROR WARN - INFO - DEBUG - TRACE - Konfiguriertes Level ERROR Nachrichten unterhalb von ERROR werden nicht ausgegeben. Nachrichten der Priorit¨t ERROR oder h¨her werden a o ausgegeben. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 19. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Beispiel: Konfiguriertes Level DEBUG Priorit¨t a Konfiguriertes Level FATAL + ERROR + WARN + INFO + DEBUG DEBUG TRACE - Konfiguriertes Level DEBUG Nachrichten unterhalb von DEBUG werden nicht ausgegeben. Nachrichten der Priorit¨t DEBUG oder h¨her werden a o ausgegeben. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 20. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Appender Appender/Datensenken Appender sind Datensenken, in die Log-Nachrichten geschrieben werden. Als Datensenke l¨sst sich von der einfachen Bildschirmausgabe a (STDERR) uber Logdateien, Syslog, SMS- oder ¨ E-Mail-Benachrichtigung, bis hin zu Datenbanken, so ziemlich alles verwenden, was man sich als Ausgabe-Medium vorstellen kann. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 21. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Log::Log4perl Appender Log::Log4perl Appender (Auswahl) Log::Log4perl::Appender::Screen Log::Log4perl::Appender::File Log::Log4perl::Appender::Socket Log::Log4perl::Appender::DBI Log::Log4perl::Appender::Synchronized Log::Log4perl::Appender::RRDs Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 22. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Log::Dispatch Appender Log::Dispatch Appender (Auswahl) Log::Dispatch::ApacheLog Log::Dispatch::DBI Log::Dispatch::Email Log::Dispatch::Email::MIMELite Log::Dispatch::File Log::Dispatch::FileRotate Log::Dispatch::Screen Log::Dispatch::Syslog u.v.a.m. ... Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 23. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Layouts Layouts - Informationsumfang Layouts formatieren Log-Nachrichten und legen den Informationsumfang fest. Log-Nachrichten k¨nnen in einer printf()-¨hnlichen Syntax o a einfach an die eigenen Bed¨rfnisse angepasst (formatiert) u werden. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 24. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Layouts Layouts - Formatierungsanweisungen 1 %c Category of the logging event. %C Fully qualified package (or class) name of the caller %d Current date in yyyy/MM/dd hh:mm:ss format %F File where the logging event occurred %H Hostname (if Sys::Hostname is available) %l Fully qualified name of the calling method followed by the callers source the file name and line number between parentheses. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 25. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Priorit¨ten Appender Layouts a Layouts Layouts - Formatierungsanweisungen 2 %T A stack trace of functions called %L Line number within the file where the log statement was issued %m The message to be logged %M Method or function where the logging request was issued %n Newline (OS-independent) %p Priority of the logging event %P pid of the current process %r Number of milliseconds elapsed from program start to logging %% A literal percent (%) sign Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 26. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Easy Mode (Stealth Logger) qw/:easy/ 1 #! / u s r / b i n / p e r l 2 use s t r i c t ; 3 use warnings ; 4 5 u s e Log : : L o g 4 p e r l qw / : e a s y / ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 27. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Automatisch importierte Funktionen qw/:easy/ Level/Priortit¨ten a FATAL ERROR WARN INFO DEBUG TRACE Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 28. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Automatisch importierte Funktionen qw/:easy/ Convenience: Log and ... LOGWARN LOGDIE LOGEXIT LOGCARP LOGCLUCK LOGCROAK LOGCONFESS Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 29. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Automatisch importierte Konstanten qw/:easy/ Level/Priortit¨ten a $FATAL $ERROR $WARN $INFO $DEBUG $TRACE Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 30. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Easy Mode initialisieren 1 easy init() 1 #! / u s r / b i n / p e r l 2 use s t r i c t ; 3 use warnings ; 4 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 5 Log : : L o g 4 p e r l −> e a s y i n i t ( ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 31. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Easy Mode initialisieren 2 easy init() initialisiert einen einfachen Logger. Der Appender ist vom Typ SCREEN, d.h. die Log-Nachrichten erscheinen auf STDERR. Das Layout der Nachrichten wird auf das Format ”%d %m%n”gesetzt. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 32. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Hallo Welt im Easy Mode Hallo Welt! 1 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 2 Log : : L o g 4 p e r l −> e a s y i n i t ( ) ; 3 INFO ( ” S t a r t e $0 ” ) ; 4 p r i n t ” H a l l o Welt ! n” ; 5 INFO ( ” Beende $0 ” ) ; Ausgabe 1 2011/08/20 1 5 : 3 1 : 2 1 S t a r t e h a l l o w e l t . p l 2 H a l l o Welt ! 3 2011/08/20 1 5 : 3 1 : 2 1 Beende h a l l o w e l t . p l Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 33. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Loglevel im Easy Mode konfigurieren Priorit¨t/Level DEBUG a 1 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 2 Log : : L o g 4 p e r l −> e a s y i n i t ( { 3 l e v e l => $DEBUG , 4 } ); Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 34. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Layout im Easy Mode konfigurieren Layout 1 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 2 Log : : L o g 4 p e r l −> e a s y i n i t ( { 3 l e v e l => $DEBUG , 4 l a y o u t => 5 ’%d [%M] %F %L> % %n ’ , } ) ; m Ausgabe 1 2011/08/20 1 6 : 2 7 : 3 6 [ main : : ] hallowelt . pl 2 10> S t a r t e h a l l o w e l t . p l 3 H a l l o Welt ! 4 2011/08/20 1 6 : 2 7 : 3 6 [ main : : ] hallowelt . pl 5 12> Beende h a l l o w e l t . p l Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 35. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Ausgabemedium im Easy Mode konfigurieren Ausgabe in eine Datei 1 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 2 Log : : L o g 4 p e r l −> e a s y i n i t ( { 3 l e v e l => $DEBUG , 4 l a y o u t => 5 ’%d [%M] %F %L> % %n ’ , m 6 f i l e => 7 ’>> . / t e s t . l o g ’ , 8 } ); Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 36. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Skalare Variablen Skalare Variablen werden wie gewohnt expandiert 1 my $ c o u n t e r = 0 ; 2 # Double Quotes 3 DEBUG( ” C o u n t e r $ c o u n t e r ” ) ; Tipp: Begrenzer um Variablen setzen 1 my $ c o u n t e r = 0 ; 2 # Double Quotes 3 DEBUG( ” C o u n t e r <$ c o u n t e r >” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 37. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Konstanten Bei Konstanten kommt der Verkettungsoperator . zum Einsatz. 1 u s e c o n s t a n t PI => 4 ∗ a t a n 2 ( 1 , 1 ) ; 2 DEBUG( ” K o n s t a n t e PI ” . PI . ” . . . ” ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 38. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Arrays, Hashes und komplexe Datenstrukturen Data::Dumper to the rescue Arrays, Hashes und komplexe Datenstrukturen lassen sich meist nur sinnvoll mit Data::Dumper loggen. Data::Dumper in Version 2.09 ist seit Perl 5.005 ein Coremodule. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 39. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Kleine Arrays Kleine Arrays - Expansion 1 sub f o o { 2 DEBUG( ” P a r a m e t e r : @ ” ) ; 3 } Kleine Arrays - foreach 1 my @ a r r a y = 1 . . 1 0 ; 2 f o r e a c h my $ e l e m e n t ( @ a r r a y ) { 3 DEBUG( ” A r r a y e l e m e n t : <$ e l e m e n t >” ) ; 4 } Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 40. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Arrays Arrays (langsam) dumpen 1 u s e Data : : Dumper ; 2 # turn o f f a l l pretty print 3 $Data : : Dumper : : I n d e n t = 0 ; 4 my @ a r r a y = 1 . . 1 0 ; 5 TRACE( ” A r r a y : ” , Dumper ( @ a r r a y ) ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 41. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Kleine Hashes Kleine Hashes - Expansion 1 my %h as h ; 2 DEBUG( ” Hash @ { [ %h a s h ] } ” ) ; Kleine Hashes - while 1 w h i l e ( my ( $key , $ v a l u e ) = e a c h %h a s h ) { 2 DEBUG( ” Hash : Key <$key> V a l u e <$ v a l u e >” ) ; 3 } Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 42. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Hashes Hashes (langsam) dumpen 1 u s e Data : : Dumper ; 2 # turn o f f a l l pretty print 3 $Data : : Dumper : : I n d e n t = 0 ; 4 my %h as h ; 5 TRACE( ” Hash : ” , Dumper ( %h a s h ) ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 43. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Need for Speed - message output filter format Arrays 1 TRACE( ” A r r a y : ” , { 2 f i l t e r => &Data : : Dumper : : Dumper , 3 v a l u e => @ a r r a y } ) ; Hashes 1 TRACE( ” Hash : ” , { 2 f i l t e r => &Data : : Dumper : : Dumper , 3 v a l u e => %h a s h } ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 44. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Message output filter format Message output filter format Log::Log4perl wird die filter Funktion, erst dann aufrufen, wenn die Nachricht wirklich in einen Appender geschrieben wird. Die filter Funktion erwartet eine Referenz auf ein Unterprogramm, welches den Dump ausf¨hrt, und eine u Referenz auf die zu loggende Datenstruktur. Spart sp¨rbar Rechenzeit und Hauptspeicher. u Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 45. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Dump Profiling Beispielprogramm 1 my %h as h = ( ) ; 2 f o r ( 1 . . 10 0 0 0 ) { 3 $ has h { $ } = 1 ; 4 } 5 6 w h i l e ( my ( $key , $ v a l u e ) = e a c h %h a s h ) { 7 TRACE( ” Hash : Key <$key> V a l u e <$ v a l u e >” ) ; 8 } 9 TRACE( ” Hash : ” , Dumper ( %h a s h ) ) ; 10 TRACE( ” Hash : ” , { 11 f i l t e r => &Data : : Dumper : : Dumper , 12 v a l u e => %h a s h } ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 46. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Dump Profiling - Konfiguriertes Level TRACE Konfiguriertes Level TRACE d.h., es soll geloggt werden. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 47. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Dump Profiling - Konfiguriertes Level INFO Konfiguriertes Level INFO d.h., es soll nicht geloggt werden. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 48. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Konfiguration Appender Konfiguration entscheidet, wie sich ein Logger verh¨lt. a d.h. ob wann wie wohin geloggt wird. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 49. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Easy Mode aus Konfigurationsdatei initialisieren init() 1 #! / u s r / b i n / p e r l 2 use s t r i c t ; 3 use warnings ; 4 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 5 Log : : L o g 4 p e r l −> i n i t ( ’ l 4 p . c o n f ’ ) 6 or die $ ! ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 50. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Konfigurationsdatei Beispiel Log::Log4perl Konfigurationsdatei 1 log4perl . logger = TRACE, A1 2 l o g 4 p e r l . a p p e n d e r . A1 3 = Log : : D i s p a t c h : : F i l e 4 l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = ./ test . log 5 l o g 4 p e r l . a p p e n d e r . A1 . mode = append 6 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 7 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 8 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 9 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 51. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Fehlende Konfigurationsdateien 1 Try 1 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 2 my $ l o g 4 p c f g f i l e = ’ /tmp/XXXXX . c f g ’ ; 3 4 # t r y to i n i t with a c o n f i g f i l e 5 eval { 6 Log : : L o g 4 p e r l −> i n i t ( $ l o g 4 p c f g f i l e ) 7 or die ” Error $ l o g 4 p c f g f i l e − $ ! ” ; 8 }; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 52. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Fehlende Konfigurationsdateien 2 Catch: 1 # c a t c h e r r o r s from i n i t and u s e a s i m p l e 2 # c o n f i g u r a t i o n , s e n d i n g e v e r y message t o 3 # STDERR 4 i f ( $@ ) { 5 Log : : L o g 4 p e r l −> e a s y i n i t ( { 6 ’ l e v e l ’ => $DEBUG , 7 ’ l a y o u t ’ => ”%d %p> %F { 1 } : %L % − % %n” , M m 8 } ); 9 WARN( ” F a l l i n g back t o e a s y c o n f i g u r a t i o n ! ” ) ; 10 } Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 53. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance init once - nur ein einziges Mal initialisieren init once() - Nur initialisieren, falls noch nicht initialisiert 1 # I n i t o r s k i p i f a l r e a d y done 2 Log : : L o g 4 p e r l −>i n i t o n c e ( $ l o g 4 p c f g f i l e ) ; mod perl Entweder in der startup.pl initialisieren oder init once() verwenden. Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 54. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance init and watch - Konfiguration im laufendem Betrieb ¨ndern. a init and watch() - zeitgesteuert. 1 my $ d e l a y = 3 0 0 ; # s e c o n d s 2 Log : : L o g 4 p e r l −>i n i t a n d w a t c h ( 3 $ l o g 4 p c f g f i l e , $delay ); init and watch() - signalgesteuert. 1 Log : : L o g 4 p e r l −>i n i t a n d w a t c h ( 2 $ l o g 4 p c f g f i l e , ’HUP ’ ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 55. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Logdateien rotieren Log::Log4perl Konfigurationsdatei 1 log4perl . logger = TRACE, A1 2 # Appender A1 3 l o g 4 p e r l . a p p e n d e r . A1 = Log : : D i s p a t c h : : F i l e R o t a t e 4 l o g 4 p e r l . a p p e n d e r . A1 . max = 10 5 l o g 4 p e r l . a p p e n d e r . A1 . s i z e = 20 0 0 0 6 l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g 7 l o g 4 p e r l . a p p e n d e r . A1 . mode = append 8 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 9 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 10 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 11 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 56. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Logs per E-Mail versenden Log::Log4perl Konfigurationsdatei 1 log4perl . logger = TRACE, M a i l e r 2 l o g 4 p e r l . appender . Mailer = Log : : D i s p a t c h : : E m a i l : : M a i l S e n d 3 l o g 4 p e r l . appender . Mailer . to = your@email . address 4 l o g 4 p e r l . appender . Mailer . s u b j e c t = My Program N o t i c e 5 l o g 4 p e r l . appender . Mailer . b u f f e r e d = 1 6 l o g 4 p e r l . appender . Mailer . l a y o u t 7 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 8 l o g 4 p e r l . appender . Mailer . l a y o u t . ConversionPattern 9 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 57. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Logdateien rotieren und FATALs per E-Mail versenden 1 Log::Log4perl Konfigurationsdatei 1 1 log4perl . logger = TRACE, A1 , M a i l e r 2 # Appender A1 3 l o g 4 p e r l . a p p e n d e r . A1 4 = Log : : D i s p a t c h : : F i l e R o t a t e 5 l o g 4 p e r l . a p p e n d e r . A1 . max = 10 6 l o g 4 p e r l . a p p e n d e r . A1 . s i z e = 20 0 0 0 7 l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g 8 l o g 4 p e r l . a p p e n d e r . A1 . mode = append 9 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 10 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 11 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . C o n v e r s i o n P a t t e r n 12 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 58. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Logdateien rotieren und FATALs per E-Mail versenden 2 Log::Log4perl Konfigurationsdatei 2 1 # Mailer 2 l o g 4 p e r l . appender . Mailer 3 = Log : : D i s p a t c h : : E m a i l : : M a i l S e n d 4 l o g 4 p e r l . appender . Mailer . to 5 = your@email . address 6 l o g 4 p e r l . appender . Mailer . s u b j e c t 7 = My Program N o t i c e 8 l o g 4 p e r l . appender . Mailer . b u f f e r e d = 1 9 l o g 4 p e r l . appender . Mailer . m i n l e v e l = f a t a l 10 l o g 4 p e r l . appender . Mailer . l a y o u t 11 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 12 l o g 4 p e r l . appender . Mailer . l a y o u t . ConversionPattern 13 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 59. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Syslog Log::Log4perl Konfigurationsdatei 1 log4perl . logger = TRACE, S y s l o g 2 3 l o g 4 p e r l . appender . Syslog = Log : : D i s p a t c h : : S y s l o g 4 l o g 4 p e r l . appender . Syslog . i d e n t = MyIdent 5 l o g 4 p e r l . appender . Syslog . f a c i l i t y = user 6 l o g 4 p e r l . appender . Syslog . l a y o u t 7 = Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 8 l o g 4 p e r l . appender . Syslog . l a y o u t . ConversionPattern 9 = %d %p> %F{1}:%L % − % %n M m Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 60. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Loggen in eine Datenbank 1 Datenbank und Loggingtabelle erstellen 1 create database logs ; 2 u l o g s 3 create table L ( 4 i d BIGINT u n s i g n e d AUTO INCREMENT NOT NULL , 5 d a t e DATETIME , 6 l o g l e v e l VARCHAR( 2 0 ) , 7 c a t e g o r y VARCHAR( 2 5 5 ) , 8 f i l e VARCHAR( 2 5 5 ) , 9 l i n e INT ( 1 0 ) UNSIGNED , 10 message TEXT, 11 PRIMARY KEY( i d ) ) ; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 61. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Loggen in eine Datenbank 2 Log::Log4perl Konfigurationsdatei 1 1 log4perl . logger = TRACE, DB 2 l o g 4 p e r l . a p p e n d e r .DB = 3 Log : : L o g 4 p e r l : : Appender : : DBI 4 l o g 4 p e r l . a p p e n d e r .DB. l a y o u t = 5 Log : : L o g 4 p e r l : : L a y o u t : : P a t t e r n L a y o u t 6 l o g 4 p e r l . a p p e n d e r .DB. d a t a s o u r c e = 7 DBI : m y s q l : l o g s : l o c a l h o s t 8 l o g 4 p e r l . a p p e n d e r .DB. username = loguser 9 l o g 4 p e r l . a p p e n d e r .DB. p a s s w o r d = geheym Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 62. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Loggen in eine Datenbank 3 Log::Log4perl Konfigurationsdatei 2 1 l o g 4 p e r l . a p p e n d e r .DB. s q l = insert into L 2 ( d at e , l o g l e v e l , c a t e g o r y , f i l e , l i n e , message ) 3 VALUES ( ? , ? , ? , ? , ? , ? ) 4 l o g 4 p e r l . a p p e n d e r .DB. params . 1 = %d 5 l o g 4 p e r l . a p p e n d e r .DB. params . 2 = %p 6 l o g 4 p e r l . a p p e n d e r .DB. params . 3 = %c 7 l o g 4 p e r l . a p p e n d e r .DB. params . 4 = %F 8 l o g 4 p e r l . a p p e n d e r .DB. params . 5 = %L 9 l o g 4 p e r l . a p p e n d e r .DB. params . 6 =% m 10 # For e f f i c i e n c y s a k e l o g o n l y a f t e r n m e s s a g e s 11 #l o g 4 p e r l . a p p e n d e r .DB. b u f f e r S i z e = 3 Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 63. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Loggen in eine XML-Datei Log::Log4perl Konfigurationsdatei 1 l o g 4 p e r l . l o g g e r = WARN, A1 2 l o g 4 p e r l . a p p e n d e r . A1 = 3 Log : : L o g 4 p e r l : : Appender : : F i l e 4 l o g 4 p e r l . a p p e n d e r . A1 . f i l e n a m e = l o g . xml 5 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t 6 = Log : : L o g 4 p e r l : : L a y o u t : : XMLLayout 7 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . L o c a t i o n I n f o = TRUE 8 l o g 4 p e r l . a p p e n d e r . A1 . l a y o u t . E n c o d i n g = i s o 8 8 5 9 −1 XML kann von Logviewern wie z.B. Chainsaw oder Lilith gelesen werden Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 64. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Chainsaw Bildnachweis: http://logging.apache.org/chainsaw/index.html Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 65. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Lilith Bildnachweis: http://sourceforge.net/projects/lilith/ Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 66. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Log::Lop4perl in Packages Packages 1 p a c k a g e Foo ; 2 use s t r i c t ; 3 use warnings ; 4 u s e Log : : L o g 4 p e r l qw / : e a s y / ; 5 6 sub f o o { 7 my $ b a r = s h i f t @ ; 8 DEBUG( ” F o o i n g <$bar>” ) ; 9 # . . . do s o m e t h i n g 10 } 11 1; Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 67. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Log::Lop4perl in Packages In Packages wird nicht initialisiert wird nicht konfiguriert werden Log Priorit¨ten vergeben a Stealth (engl. Heimlichkeit) Wenn ein Logger nicht durch ein Programm initialisiert wird, wird der Logging Code im Package nicht ausgef¨hrt. u Das hat den Charme, das man auch Pakete Log::Log4perl f¨hig machen kann, ohne treibende Programme zu ¨nderen. a a Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 68. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Workflow Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 69. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance Performance Je mehr geloggt wird, desto schlechter die Performance Loglevel WARN f¨r produktive Systeme u Loglevel ERROR f¨r produktive Systeme mit hoher Last u Spezielle Konfigurationen nutzen, falls spezielle Probleme gel¨st werden m¨ssen o u Ein Profiler wie Devel::NYTProf ist hilfreich Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 70. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a RTFM Log::Log4perl wird mit umfangreicher Dokumentation ausgeliefert. The log4perl project – log4j for Perl http://mschilli.github.com/log4perl/ Manual http://search.cpan.org/perldoc?Log::Log4perl FAQ http://search.cpan.org/perldoc?Log::Log4perl::FAQ Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 71. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a Artikel Michael Schilli Logging nach Bedarf mit Log::Log4perl - Wachsame Schl¨fer a http://www.linux-magazin.de/heft_abo/ausgaben/ 2003/01/wachsame_schlaefer Retire your debugger, log smartly with Log::Log4perl! http: //www.perl.com/pub/a/2002/09/11/log4perl.html Praktisch jeder Artikel im Linux-Magazin - Entwicklung - Perl http://www.linux-magazin.de/Themengebiete/ Entwicklung/Perl Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 72. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a Artikel Diverse Autoren brian d foy: Mastering Perl: Logging http://www252.pair.com/comdog/mastering_perl/ Chapters/13.logging.html Horshack’s Log4perl Page http://lena.franken.de/perl_hier/log4perl.html Kennedy Clark: Using Catalyst with Log4perl http://www.catalystframework.org/calendar/2006/11 Patrick H. Piper: 8 Useful Log::Log4perl Recipes http://netlinxinc.com/netlinx-blog/52-perl/ 126-eight-loglog4perl-recipes.html Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 73. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a Vortr¨ge a Michael Schilli Log4perl: the Only Logging System You’ll Ever Need - OSCON 2008 http://mschilli.github.com/log4perl/l4p.ppt Talk at YAPC 2007 (Houston, TX) - Smart Logging with Log4perl: http://perlmeister.com/log4perl_yapc.html Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 74. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a Vortr¨ge a Diverse Autoren Madmongers - Logging http://www.madmongers.org/uploads/Mc/oB/ McoBWGNx-nYiEpqQfYz4kA/logging---madmongers.pdf WebGUI TV - Logging http://www.webgui.org/wgtv/logging Ren´e B¨cker - Log::Log4perl (FrOSCon 2010) e a http://www.renee-baecker.de/vortraege.html Thomas Fahle - Log::Log4perl qw/:easy/ http://www.slideshare.net/thomasfahle/ loglog4perl-qweasy-presentation Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 75. Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortr¨ge Artikel Recommended Readings a log4j zum Vergleich log4j Ceki G¨lc¨ - Short introduction to log4j u u http://logging.apache.org/log4j/1.2/manual.html Apache log4jTM http://logging.apache.org/log4j/ Vipan Singla - Don’t Use System.out.println! Use Log4j http://www.vipan.com/htdocs/log4jhelp.html Logback Project - intended as a successor to the popular log4j project - http://logback.qos.ch/ Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 76. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Fragen Danke! Perl.org Fragen? Fragen? Fragen! Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 77. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Fragen Danke! Perl.org Vielen Dank! Danke! Vielen Dank! Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u
  • 78. Einleitung Grundlagen Stealth-Logger Resourcen Fragen Fragen Danke! Perl.org Perl.org When you need Perl think Perl.org http://www.Perl.org http://learn.Perl.org http://blogs.Perl.org http://jobs.Perl.org Flexible & Powerful That’s why we love Perl! Thomas Fahle Easy Logging Einf¨hrung in Log::Log4perl qw/:easy/ u