Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Einleitung Grundlagen Stealth-Logger Resourcen Fragen
Easy LoggingEinfuhrung in Log::Log4perl qw/:easy/
Thomas Fahle
FrOSCon 2011, St. Augustin, 21. August 2011
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Ubersicht Uber Log::Log4perl
Uber diesen Vortrag
Einfuhrung in Log::Log4perl
Log::Log4perl Grundlagen
Easy Mode - Stealth-Logger
BasicsDatenstrukturenAppenderPackagesPerformance
Resourcen im Netz - Mehr Infos
Slides online
http://www.slideshare.net/thomasfahle
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Ubersicht Uber Log::Log4perl
Log::Log4perl?
Port von log4j
Author: Michael Schilli
sehr ausgereiftes Logging-Framework (Profilosung)
Umfangreiche, komplette, aber oft verwirrende Dokumentation
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Ubersicht Uber Log::Log4perl
Log::Log4perl
liefert Information aus dem tatsachlichen Betrieb desProgramms
durch Konfigurationsdateien konnen Loggingstatements, dieeigentlich zum Testen/Debuggen gedacht sind imausgeliefertem Code verbleiben
Ausgabeziele und Formate konnen uber Konfigurationsdateienunterschiedlichen Umgebungen und Bedurfnissen angepasstwerden.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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, einfachesLoggen, eben EASY.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritaten
Prioritaten oder Loglevel
(lat. prior = der Vordere) legen die Wichtigkeit einesLoggingereignisses fest.Ob ein Logger die ihm ubergebenen Nachrichten tatsachlichweitergibt oder unterdruckt, wird in der Konfiguration festgelegt.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Vordefinierte Prioritaten
Log::Log4perl stellt sechs vordefinierte Loglevel zur Verfugung
Die Level in absteigender Reihenfolge:
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
Zusatzlich wird auch das Pseudolevel ALWAYS bereitgestellt.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat TRACE
TRACE
Das Level TRACE kennzeichnet sehr, sehr feinkornige Ereignisse -feinkorniger als das nachste Level DEBUG.
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat DEBUG
DEBUG
Das Level DEBUG kennzeichnet feinkornige Ereignisse, die nutzlichsind, um eine Applikation zu debuggen.
Beispiel:
DEBUG( ”HTTP GET r e q u e s t OK” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat INFO
INFO
Das Level INFO kennzeichnet grobkornige Ereignisse, die uber denFortschritt des Programms informieren.
Beispiel:
INFO ( ” S t a r t e $0” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat WARN
WARN
Das Level WARN kennzeichnet Ereignisse, die auf kleine Fehlerhinweisen. 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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat ERROR
ERROR
Das Level ERROR kennzeichnet Ereignisse, die auf großere Fehlerhinweisen. Das Programm kann aber oft noch weiterlaufen.
Beispiel:
ERROR( ”Out o f r e t r i e s ! ” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat FATAL
FATAL
Das Level FATAL kennzeichnet Ereignisse, die auf schwerwiegendeFehler hinweisen. Das Programm wird meist beendet werdenmussen.
Beispiel:
FATAL( ”Can ’ t c o n n e c t to d a t a b a s e . ” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Prioritat ALWAYS
ALWAYS
Das Level ALWAYS kennzeichnet Ereignisse, die immer geloggtwerden sollen. Sie werden niemals geblockt.
Beispiel:
ALWAYS( ” This w i l l be p r i n t e d r e g a r d l e s so f t he l o g l e v e l . ” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Konfiguration Prioritat
Konfiguration
entscheidet, wie sich ein Logger verhalt.
d.h. ob wie wohin geloggt wird.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Konfiguration und Prioritat
Prioritat KonfigurationFATAL FATALERROR ERRORWARN WARNINFO INFODEBUG DEBUGTRACE TRACE
Prioritat und Konfiguration
Zu jeder Prioritat im Programm gehort eine entsprechendePrioritat in der Konfiguration.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Beispiel: Konfiguriertes Level WARN
Prioritat Konfiguriertes LevelFATAL +ERROR +WARN WARNINFO -DEBUG -TRACE -
Konfiguriertes Level WARN
Nachrichten unterhalb von WARN werden nicht ausgegeben.
Nachrichten der Prioritat WARN oder hoher werdenausgegeben.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Beispiel: Konfiguriertes Level ERROR
Prioritat Konfiguriertes LevelFATAL +ERROR ERRORWARN -INFO -DEBUG -TRACE -
Konfiguriertes Level ERROR
Nachrichten unterhalb von ERROR werden nicht ausgegeben.
Nachrichten der Prioritat ERROR oder hoher werdenausgegeben.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Beispiel: Konfiguriertes Level DEBUG
Prioritat Konfiguriertes LevelFATAL +ERROR +WARN +INFO +DEBUG DEBUGTRACE -
Konfiguriertes Level DEBUG
Nachrichten unterhalb von DEBUG werden nicht ausgegeben.
Nachrichten der Prioritat DEBUG oder hoher werdenausgegeben.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Appender
Appender/Datensenken
Appender sind Datensenken, in die Log-Nachrichten geschriebenwerden.Als Datensenke lasst sich von der einfachen Bildschirmausgabe(STDERR) uber Logdateien, Syslog, SMS- oderE-Mail-Benachrichtigung, bis hin zu Datenbanken, so ziemlich allesverwenden, was man sich als Ausgabe-Medium vorstellen kann.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Layouts
Layouts - Informationsumfang
Layouts formatieren Log-Nachrichten und legen denInformationsumfang fest.
Log-Nachrichten konnen in einer printf()-ahnlichen Syntaxeinfach an die eigenen Bedurfnisse angepasst (formatiert)werden.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
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 thecallers source the file name and line number betweenparentheses.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Prioritaten Appender Layouts
Layouts
Layouts - Formatierungsanweisungen 2
%T A stack trace of functions called
%L Line number within the file where the log statement wasissued
%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 tologging
%% A literal percent (%) sign
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 l2 use s t r i c t ;3 use w a r n i n g s ;4
5 use Log : : L o g 4 p e r l qw / : e a s y / ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Automatisch importierte Funktionen qw/:easy/
Level/Priortitaten
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Automatisch importierte Konstanten qw/:easy/
Level/Priortitaten
$FATAL
$ERROR
$WARN
$INFO
$DEBUG
$TRACE
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 l2 use s t r i c t ;3 use w a r n i n g s ;4 use 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 Einfuhrung in Log::Log4perl qw/:easy/
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-Nachrichtenerscheinen auf STDERR.
Das Layout der Nachrichten wird auf das Format ”%d%m%n”gesetzt.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Hallo Welt im Easy Mode
Hallo Welt!
1 use 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 l2 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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Loglevel im Easy Mode konfigurieren
Prioritat/Level DEBUG
1 use 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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Layout im Easy Mode konfigurieren
Layout
1 use 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> %m%n ’ , } ) ;
Ausgabe
1 2011/08/20 1 6 : 2 7 : 3 6 [ main : : ] h a l l o w e l t . p l \2 10> S t a r t e h a l l o w e l t . p l3 H a l l o Welt !4 2011/08/20 1 6 : 2 7 : 3 6 [ main : : ] h a l l o w e l t . p l \5 12> Beende h a l l o w e l t . p l
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Ausgabemedium im Easy Mode konfigurieren
Ausgabe in eine Datei
1 use 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> %m%n ’ ,6 f i l e =>7 ’>> . / t e s t . l o g ’ ,8 } ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 Quotes3 DEBUG( ” Counter $ c o u n t e r ” ) ;
Tipp: Begrenzer um Variablen setzen
1 my $ c o u n t e r = 0 ;2 # Double Quotes3 DEBUG( ” Counter <$counte r>” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Konstanten
Bei Konstanten kommt der Verkettungsoperator . zum Einsatz.
1 use c o n s t a n t PI => 4 ∗ atan2 ( 1 , 1 ) ;2 DEBUG( ” Konstante PI ” . PI . ” . . . ” ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 sichmeist nur sinnvoll mit Data::Dumper loggen.
Data::Dumper in Version 2.09 ist seit Perl 5.005 einCoremodule.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Kleine Arrays
Kleine Arrays - Expansion
1 sub f o o {2 DEBUG( ” Parameter : @ ” ) ;3 }
Kleine Arrays - foreach
1 my @array = 1 . . 1 0 ;2 f o r e a c h my $e lement ( @ar ray ) {3 DEBUG( ” A r r a y e l e m e n t : <$element>” ) ;4 }
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Arrays
Arrays (langsam) dumpen
1 use Data : : Dumper ;2 # t u r n o f f a l l p r e t t y p r i n t3 $Data : : Dumper : : I n d e n t = 0 ;4 my @array = 1 . . 1 0 ;5 TRACE( ” Array : ” , Dumper ( \@array ) ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Kleine Hashes
Kleine Hashes - Expansion
1 my %hash ;2 DEBUG( ”Hash @{ [ %hash ]} ” ) ;
Kleine Hashes - while
1 w h i l e ( my ( $key , $ v a l u e ) = each %hash ) {2 DEBUG( ”Hash : Key <$key> Value <$ v a l u e>” ) ;3 }
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Hashes
Hashes (langsam) dumpen
1 use Data : : Dumper ;2 # t u r n o f f a l l p r e t t y p r i n t3 $Data : : Dumper : : I n d e n t = 0 ;4 my %hash ;5 TRACE( ”Hash : ” , Dumper ( \%hash ) ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Need for Speed - message output filter format
Arrays
1 TRACE( ” Array : ” , {2 f i l t e r => \&Data : : Dumper : : Dumper ,3 v a l u e => \@array } ) ;
Hashes
1 TRACE( ”Hash : ” , {2 f i l t e r => \&Data : : Dumper : : Dumper ,3 v a l u e => \%hash } ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 geschriebenwird.
Die filter Funktion erwartet eine Referenz auf einUnterprogramm, welches den Dump ausfuhrt, und eineReferenz auf die zu loggende Datenstruktur.
Spart spurbar Rechenzeit und Hauptspeicher.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Dump Profiling
Beispielprogramm
1 my %hash = ( ) ;2 f o r ( 1 . . 10 000 ) {3 $hash { $ } = 1 ;4 }5
6 w h i l e ( my ( $key , $ v a l u e ) = each %hash ) {7 TRACE( ”Hash : Key <$key> Value <$ v a l u e>” ) ;8 }9 TRACE( ”Hash : ” , Dumper ( \%hash ) ) ;
10 TRACE( ”Hash : ” , {11 f i l t e r => \&Data : : Dumper : : Dumper ,12 v a l u e => \%hash } ) ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 Einfuhrung in Log::Log4perl qw/:easy/
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Konfiguration Appender
Konfiguration
entscheidet, wie sich ein Logger verhalt.
d.h. ob wann wie wohin geloggt wird.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 l2 use s t r i c t ;3 use w a r n i n g s ;4 use 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 d i e $ ! ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Konfigurationsdatei Beispiel
Log::Log4perl Konfigurationsdatei
1 l o g 4 p e r l . l o g g e r = TRACE, A12 l o g 4 p e r l . appender . A1 \3 = Log : : D i s p a t c h : : F i l e4 l o g 4 p e r l . appender . A1 . f i l e n a m e = . / t e s t . l o g5 l o g 4 p e r l . appender . A1 . mode = append6 l o g 4 p e r l . appender . A1 . l a y o u t \7 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t8 l o g 4 p e r l . appender . 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 %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Fehlende Konfigurationsdateien 1
Try
1 use 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 w i t h a c o n f i g f i l e5 e v a l {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 d i e ” E r r o r $ l o g 4 p c f g f i l e − $ ! ” ;8 } ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 use a s i m p l e2 # 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 to3 # STDERR4 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 %M − %m%n” ,8 } ) ;9 WARN( ” F a l l i n g back to e a s y c o n f i g u r a t i o n ! ” ) ;
10 }
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 done2 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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
init and watch - Konfiguration im laufendem Betriebandern.
init and watch() - zeitgesteuert.
1 my $ d e l a y = 3 0 0 ; # s e c o n d s2 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 , $ d e l a y ) ;
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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Logdateien rotieren
Log::Log4perl Konfigurationsdatei
1 l o g 4 p e r l . l o g g e r = TRACE, A12 # Appender A13 l o g 4 p e r l . appender . A1
= Log : : D i s p a t c h : : F i l e R o t a t e4 l o g 4 p e r l . appender . A1 . max = 105 l o g 4 p e r l . appender . A1 . s i z e = 20 0006 l o g 4 p e r l . appender . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g7 l o g 4 p e r l . appender . A1 . mode = append8 l o g 4 p e r l . appender . A1 . l a y o u t \9 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t
10 l o g 4 p e r l . appender . 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 %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Logs per E-Mail versenden
Log::Log4perl Konfigurationsdatei
1 l o g 4 p e r l . l o g g e r = TRACE, M a i l e r2 l o g 4 p e r l . appender . M a i l e r
= Log : : D i s p a t c h : : Emai l : : Mai lSend3 l o g 4 p e r l . appender . M a i l e r . to
= yo u r @e m ai l . a d d r e s s4 l o g 4 p e r l . appender . M a i l e r . s u b j e c t
= My Program N o t i c e5 l o g 4 p e r l . appender . M a i l e r . b u f f e r e d = 16 l o g 4 p e r l . appender . M a i l e r . l a y o u t \7 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t8 l o g 4 p e r l . appender . M a i l e r . 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 %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 l o g 4 p e r l . l o g g e r = TRACE, A1 , M a i l e r2 # Appender A13 l o g 4 p e r l . appender . A1 \4 = Log : : D i s p a t c h : : F i l e R o t a t e5 l o g 4 p e r l . appender . A1 . max = 106 l o g 4 p e r l . appender . A1 . s i z e = 20 0007 l o g 4 p e r l . appender . A1 . f i l e n a m e = . / l o g s / l o g f i l e . l o g8 l o g 4 p e r l . appender . A1 . mode = append9 l o g 4 p e r l . appender . A1 . l a y o u t \
10 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t11 l o g 4 p e r l . appender . 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 %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 # M a i l e r2 l o g 4 p e r l . appender . M a i l e r \3 = Log : : D i s p a t c h : : Emai l : : Mai lSend4 l o g 4 p e r l . appender . M a i l e r . to \5 = yo u r @e m ai l . a d d r e s s6 l o g 4 p e r l . appender . M a i l e r . s u b j e c t \7 = My Program N o t i c e8 l o g 4 p e r l . appender . M a i l e r . b u f f e r e d = 19 l o g 4 p e r l . appender . M a i l e r . m i n l e v e l = f a t a l
10 l o g 4 p e r l . appender . M a i l e r . l a y o u t \11 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t12 l o g 4 p e r l . appender . M a i l e r . l a y o u t . C o n v e r s i o n P a t t e r n \13 = %d %p> %F{1}:%L %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Syslog
Log::Log4perl Konfigurationsdatei
1 l o g 4 p e r l . l o g g e r = TRACE, S y s l o g2
3 l o g 4 p e r l . appender . S y s l o g= 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 . S y s l o g . i d e n t = MyIdent5 l o g 4 p e r l . appender . S y s l o g . f a c i l i t y = u s e r6 l o g 4 p e r l . appender . S y s l o g . l a y o u t \7 = Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t8 l o g 4 p e r l . appender . S y s l o g . 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 %M − %m%n
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Loggen in eine Datenbank 1
Datenbank und Loggingtabelle erstellen
1 c r e a t e d a t a b a s e l o g s ;2 \u l o g s3 c r e a t e t a b l e L (4 i d BIGINT u n s i g n e d AUTO INCREMENT NOT NULL ,5 da te 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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Loggen in eine Datenbank 2
Log::Log4perl Konfigurationsdatei 1
1 l o g 4 p e r l . l o g g e r = TRACE, DB2 l o g 4 p e r l . appender .DB = \3 Log : : L o g 4 p e r l : : Appender : : DBI4 l o g 4 p e r l . appender .DB. l a y o u t = \5 Log : : L o g 4 p e r l : : Layout : : P a t t e r n L a y o u t6 l o g 4 p e r l . appender .DB. d a t a s o u r c e = \7 DBI : mysql : l o g s : l o c a l h o s t8 l o g 4 p e r l . appender .DB. username = l o g u s e r9 l o g 4 p e r l . appender .DB. password = geheym
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 . appender .DB. s q l = i n s e r t i n t o L \2 ( date , 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 . appender .DB. params . 1 = %d5 l o g 4 p e r l . appender .DB. params . 2 = %p6 l o g 4 p e r l . appender .DB. params . 3 = %c7 l o g 4 p e r l . appender .DB. params . 4 = %F8 l o g 4 p e r l . appender .DB. params . 5 = %L9 l o g 4 p e r l . appender .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 messages11 #l o g 4 p e r l . appender .DB. b u f f e r S i z e = 3
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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, A12 l o g 4 p e r l . appender . A1 = \3 Log : : L o g 4 p e r l : : Appender : : F i l e4 l o g 4 p e r l . appender . A1 . f i l e n a m e = l o g . xml5 l o g 4 p e r l . appender . A1 . l a y o u t \6 = Log : : L o g 4 p e r l : : Layout : : XMLLayout7 l o g 4 p e r l . appender . A1 . l a y o u t . L o c a t i o n I n f o = TRUE8 l o g 4 p e r l . appender . A1 . l a y o u t . Encoding = i s o8 8 5 9−1
XML
kann von Logviewern wie z.B. Chainsaw oder Lilith gelesen werden
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Chainsaw
Bildnachweis: http://logging.apache.org/chainsaw/index.html
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Lilith
Bildnachweis: http://sourceforge.net/projects/lilith/
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Log::Lop4perl in Packages
Packages
1 package Foo ;2 use s t r i c t ;3 use w a r n i n g s ;4 use Log : : L o g 4 p e r l qw / : e a s y / ;5
6 sub f o o {7 my $bar = s h i f t @ ;8 DEBUG( ” Fooing <$bar>” ) ;9 # . . . do someth ing
10 }11 1 ;
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 Prioritaten vergeben
Stealth (engl. Heimlichkeit)
Wenn ein Logger nicht durch ein Programm initialisiert wird,wird der Logging Code im Package nicht ausgefuhrt.
Das hat den Charme, das man auch Pakete Log::Log4perlfahig machen kann, ohne treibende Programme zu anderen.
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Workflow
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Basics Datenstrukturen Appender Packages Performance
Performance
Je mehr geloggt wird, desto schlechter die Performance
Loglevel WARN fur produktive Systeme
Loglevel ERROR fur produktive Systeme mit hoher Last
Spezielle Konfigurationen nutzen, falls spezielle Problemegelost werden mussen
Ein Profiler wie Devel::NYTProf ist hilfreich
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
RTFM
Log::Log4perl wird mit umfangreicher Dokumentation ausgeliefert.
The log4perl project – log4j for Perlhttp://mschilli.github.com/log4perl/
Manualhttp://search.cpan.org/perldoc?Log::Log4perl
FAQhttp://search.cpan.org/perldoc?Log::Log4perl::FAQ
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
Artikel
Michael Schilli
Logging nach Bedarf mit Log::Log4perl - Wachsame Schlaferhttp://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 - Perlhttp://www.linux-magazin.de/Themengebiete/
Entwicklung/Perl
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
Artikel
Diverse Autoren
brian d foy: Mastering Perl: Logginghttp://www252.pair.com/comdog/mastering_perl/
Chapters/13.logging.html
Horshack’s Log4perl Pagehttp://lena.franken.de/perl_hier/log4perl.html
Kennedy Clark: Using Catalyst with Log4perlhttp://www.catalystframework.org/calendar/2006/11
Patrick H. Piper: 8 Useful Log::Log4perl Recipeshttp://netlinxinc.com/netlinx-blog/52-perl/
126-eight-loglog4perl-recipes.html
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
Vortrage
Michael Schilli
Log4perl: the Only Logging System You’ll Ever Need -OSCON 2008http://mschilli.github.com/log4perl/l4p.ppt
Talk at YAPC 2007 (Houston, TX) - Smart Logging withLog4perl: http://perlmeister.com/log4perl_yapc.html
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
Vortrage
Diverse Autoren
Madmongers - Logginghttp://www.madmongers.org/uploads/Mc/oB/
McoBWGNx-nYiEpqQfYz4kA/logging---madmongers.pdf
WebGUI TV - Logginghttp://www.webgui.org/wgtv/logging
Renee Backer - Log::Log4perl (FrOSCon 2010)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 Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen RTFM Vortrage Artikel Recommended Readings
log4j zum Vergleich
log4j
Ceki Gulcu - Short introduction to log4jhttp://logging.apache.org/log4j/1.2/manual.html
Apache log4jTM http://logging.apache.org/log4j/
Vipan Singla - Don’t Use System.out.println! Use Log4jhttp://www.vipan.com/htdocs/log4jhelp.html
Logback Project - intended as a successor to the popular log4jproject - http://logback.qos.ch/
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Fragen Danke! Perl.org
Fragen?
Fragen?
Fragen!
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
Einleitung Grundlagen Stealth-Logger Resourcen Fragen Fragen Danke! Perl.org
Vielen Dank!
Danke!
Vielen Dank!
Thomas Fahle Easy Logging Einfuhrung in Log::Log4perl qw/:easy/
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 Einfuhrung in Log::Log4perl qw/:easy/