Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Loggen am Beispiel von log4j
ETIS 2005
2
Gliederung Motivation Logging Hauptbestandteile Logger Appender Layout
Konfiguration Log4j vs. Sun‘ s Logging API Zusammenfassung Log4J
3
Motivation - Aufgaben Logging
Low level debug-Methode Innere Abläufe der Anwendung (über Ausgaben) verfolgen Information über Zustand des Programms Programm läuft Programm fehlerhaft Information über wichtige Ereignisse welche Methoden, in welcher Reihenfolge aufgerufen Probleme aufgetreten Suche logischer Fehler Kontrolle von Variablenwerten Log4J
4
Motivation - Alternativen Logging
Debugger: umfangreiche Konfigurations- und Kontrollmöglichkeiten nicht immer verfügbar (verteilte Anwendungen) Loggen oft schneller Debugging transient - Logging persistent System.out.print(...) steht immer zur Verfügung, leicht anzuwenden Übersichtlichkeitsprobleme nur Standardausgabe Ausgaben nicht zur Laufzeit konfigurierbar und nicht einfach abschaltbar (nur löschbar oder extra Konstrukte programmieren) Log4J
5
Motivation - Log4j I Selber Programmieren einer Logging API belastet eigentliches Projekt zusätzlich Loggen in vielen Projekten benötigt (in Entwicklung + produktiver Umgebung) vorhandene Logging-API nutzen, z.B. de facto Standard log4j, um Log-Statements zu nutzen entstand aus Logging-API des EU-Projektes Semper Apache Jakarta Projekt, Open Source einsetzbar ab JDK 1.1 einfacher Einstieg in API bei sehr komplexen Möglichkeiten Log4J
6
Motivation Log4j II Evtl. Probleme beim Loggen: Anwendung verlangsamt
Informationen schwer finden Ziele Log4J: Wenig Performanceverluste durch Logging klassifizierbare Informationen (z.B. Ausschalten bestimmter Loginformationen) Anwendung zur Laufzeit konfigurierbar Loginformationen zur Laufzeit an- und ausschaltbar frei definierbare Ausgabeformate/-orte der Log-Meldungen Log4J
7
Hauptbestandteile Logger (Wird geloggt?) Appender (Wohin?)
Layouts (Format?) Log4J
8
Klasse Logger Kernkomponente Klassenname als Loggername ist Konvention
Bereitstellung als statische Variable in Anwendung private static Logger logger = Logger.getLogger(“test.Sample“); Besitzt Methoden, um Meldungen (auf verschiedenen Stufen) wie: logger.debug(“irgendwas“); logger.info (“irgendwas“); auszugeben vordefinierte Level erweiterbar Log4J
9
Vordefinierte Log-Level
Normale Log-Level DEBUG feingranulare Informationsereignisse, zum Debuggen INFO informierende Nachrichten, groben Ablauf aufzeigen WARN potentiell nachteilige Situationen ERROR Fehler, Anwendung läuft evtl. weiter FATAL ernster Fehler, meist Abbruch der Anwendung Spezielle Log-Level ALL niedrigste Priorität, Loggen anschalten OFF höchste Priorität, Loggen abschalten ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF Log4J
10
Log-Level I Logger haben bestimmtes Level
z.B. Logger hat Level WARN (z.B. in Konfigurationsdatei festgelegt) Log-Methoden haben bestimmtes Level z.B. c.info(...): Log-Meldung auf Level INFO Level des Loggers entscheidet, ob Log-Meldung geschrieben wird Schreiben, wenn Level der Log-Methode höher oder gleich dem Level seines Loggers z.B. Logger hat Level WARN + Methode ist c.info(), da INFO < WARN: c.info ignoriert Log4J
11
Log-Level II Logger bilden durch “.“ getrennte hierarchische Baum-Struktur z.B. java.sql.Connection Ein Root-Logger weitere Logger ein Vorfahr und evtl. mehrere Nachfahren java Vorfahr von java.sql Level der Logger vererbbar, wenn nicht explizit gesetzt z.B. java: INFO, sql: keine Zuweisung sql = INFO z.B. java: INFO, sql: WARN sql = WARN Wenn Klassenname = Loggername Logging für einzelne Klasse oder packages ein- und ausschaltbar Log4J
12
Logging - Performance Log-Statements bleiben i.d.R. im Code
Versteckte Kosten für Parameterkonstruktion logger.debug(“irgendwas“); if-Statement als Performance-Wrapper if (logger.isDebugEnabled() == true){ logger.debug(“irgendwas“ + ichBinTeuer()); } Log4J
13
Appender jedem Logger sind ein oder mehrere Appender zuordenbar
Appender in Loggerhierarchie vererbt Appender legt fest, wohin geloggt wird z.B. Console, File, JDBC, SMTP... (können um eigene erweitert werden) Vererbungskonzept Appender: Kinder des Loggers erben automatisch alle Appender des Vaters z.B. Vater hat Konsole-Appender, Kind hat File-Appender Kind schreibt auf Konsole und in File Logger-Attribut additivity = false unterbindet Vererbung Log4J
14
Layout Appender wird bei Konfiguration Layout-Pattern übergeben
beschreibt, wie Ausgabe aussieht optische Aufbesserung verbesserte Fehlersuche Z.B. PatternLayout, HTMLLayout, XMLLayout (können um eigene erweitert werden) Pattern-Layout am flexibelsten, C printf-Funktion nachempfunden Log4J
15
Konfiguration Ziel: Logging-Verhalten zur Laufzeit konfigurieren
in Konfigurationsdatei Verhalten einstellen für Anbindung an Konfigurationsdatei sorgen durch einmaligen Aufruf von configure() BasicConfigurator ohne Konfigurationsdatei, belegt System mit sinnvollen Startwerten PropertyConfigurator bezieht Daten aus Properties-Datei DOMConfigurator ähnlich P. Dateiformat XML Log4J
16
Properties-Datei (log4j.properties)
#obersten Logger auf DEBUG setzen, Appender: A1 log4j.rootLogger = DEBUG, A1 #A1 ist ConsoleAppender Ausgabe auf Console log4j.appender.A1 = org.apache.log4j.ConsoleAppender #A1 verwendet ein Pattern Layout log4j.appender.A1.layout = org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern = [%d / %p / %c ] - %m%n%n Log4J
17
Log4J vs. Sun‘s Log API Ähnlichkeiten in Namensgebung (Klassen: Logger, Level) Konzept hierarchischer Logger ähnlich Log4J viele Appender, Sun 3 Handler Log4J Konfiguration in XML + Properties-Datei, Sun nur Properties-Datei Log4J ab JDK 1.1, Sun erst ab 1.4 Log4J gereift und robust, performanter, umfangreicher Log4J Portierungen für PHP, C/C++, Python, .NET Log4J
18
Zusammenfassung open source
gute Performance, Funktionalität, Handhabung gute Integrierbarkeit in eigene Anwendungen umfangreiche Erweiterungsmöglichkeiten in existierenden Systemen verwendet (JBoss) GUI-basierte Tools vorhanden (Chainsaw, LogFactor5) momentan besser als Sun‘ s Logging API, Wechsel allerdings recht unproblematisch Log4J
19
Quellen Wille, S., Go To Java Server Pages, Addison-Wesley, München, 2001 Evertz, M.: Logger Dir Einen, Javamagazin, 11/2002, S.23 Eickstädt, D., Reuhl, T., Java mit Open Source-Tools, Markt+Technik, München, 2003 Log4J
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.