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