Rheinwerk Computing < openbook >

Inhaltsverzeichnis
Materialien zum Buch
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichen und Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Schnittstellen, Aufzählungen, versiegelte Klassen, Records
9 Ausnahmen müssen sein
10 Geschachtelte Typen
11 Besondere Typen der Java SE
12 Generics<T>
13 Lambda-Ausdrücke und funktionale Programmierung
14 Architektur, Design und angewandte Objektorientierung
15 Java Platform Module System
16 Die Klassenbibliothek
17 Einführung in die nebenläufige Programmierung
18 Einführung in Datenstrukturen und Algorithmen
19 Einführung in grafische Oberflächen
20 Einführung in Dateien und Datenströme
21 Einführung ins Datenbankmanagement mit JDBC
22 Bits und Bytes, Mathematisches und Geld
23 Testen mit JUnit
24 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil 16 Die Klassenbibliothek
Pfeil 16.1 Die Java-Klassenphilosophie
Pfeil 16.1.1 Modul, Paket, Typ
Pfeil 16.1.2 Übersicht über die Pakete der Standardbibliothek
Pfeil 16.2 Einfache Zeitmessung und Profiling *
Pfeil 16.3 Die Klasse Class
Pfeil 16.3.1 An ein Class-Objekt kommen
Pfeil 16.3.2 Eine Class ist ein Type
Pfeil 16.4 Klassenlader
Pfeil 16.4.1 Die Klasse java.lang.ClassLoader
Pfeil 16.5 Die Utility-Klassen System und Properties
Pfeil 16.5.1 Speicher der JVM
Pfeil 16.5.2 Anzahl der CPUs bzw. Kerne
Pfeil 16.5.3 Systemeigenschaften der Java-Umgebung
Pfeil 16.5.4 Eigene Properties von der Konsole aus setzen *
Pfeil 16.5.5 Zeilenumbruchzeichen, line.separator
Pfeil 16.5.6 Umgebungsvariablen des Betriebssystems
Pfeil 16.6 Sprachen der Länder
Pfeil 16.6.1 Sprachen in Regionen über Locale-Objekte
Pfeil 16.7 Wichtige Datum-Klassen im Überblick
Pfeil 16.7.1 Der 1.1.1970
Pfeil 16.7.2 System.currentTimeMillis()
Pfeil 16.7.3 Einfache Zeitumrechnungen durch TimeUnit
Pfeil 16.8 Date-Time-API
Pfeil 16.8.1 Menschenzeit und Maschinenzeit
Pfeil 16.8.2 Die Datumsklasse LocalDate
Pfeil 16.9 Logging mit Java
Pfeil 16.9.1 Logging-APIs
Pfeil 16.9.2 Logging mit java.util.logging
Pfeil 16.10 Maven: Build-Management und Abhängigkeiten auflösen
Pfeil 16.10.1 Beispielprojekt in Eclipse mit Maven
Pfeil 16.10.2 Properties hinzunehmen
Pfeil 16.10.3 Dependency hinzunehmen
Pfeil 16.10.4 Lokales und das Remote-Repository
Pfeil 16.10.5 Lebenszylus, Phasen und Maven-Plugins
Pfeil 16.10.6 Archetypes
Pfeil 16.11 Zum Weiterlesen
 

Zum Seitenanfang

16.9    Logging mit Java Zur vorigen ÜberschriftZur nächsten Überschrift

Das Loggen (Protokollieren) von Informationen über Programmzustände ist ein wichtiger Teil, um später den Ablauf und die Zustände von Programmen rekonstruieren und verstehen zu können. Mit einer Logging-API lassen sich Meldungen auf die Konsole oder in externe Speicher wie Text- bzw. XML-Dateien und Datenbanken schreiben oder über einen Chat verbreiten.

 

Zum Seitenanfang

16.9.1    Logging-APIs Zur vorigen ÜberschriftZur nächsten Überschrift

Bei den Logging-Bibliotheken und APIs ist die Java-Welt leider gespalten. Da die Java-Standardbibliothek in den ersten Versionen keine Logging-API anbot, füllte die Open-Source-Bibliothek log4j schnell diese Lücke. Sie wird heute in nahezu jedem größeren Java-Projekt eingesetzt. Als in Java 1.4 die Logging-API (JSR 47) einzog, war die Java-Gemeinde erstaunt, dass java.util.logging (JUL) weder API-kompatibel mit dem beliebten log4j noch so leistungsfähig wie log4j ist.[ 246 ](Die Standard Logging-API ist dagegen nur ein laues Lüftchen, das nur Grundlegendes wie hierarchische Logger bietet. An die Leistungsfähigkeit von log4j mit einer großen Anzahl von Schreibern in Dateien, Syslog-/NT-Logger, Datenbanken, Versand über das Netzwerk kommt das Standard-Logging nicht heran. )

Im Laufe der Jahre veränderte sich das Bild. Während in der Anfangszeit Entwickler ausschließlich auf log4j bauten, werden es langsam mehr Projekte mit der JUL. Ein erster Grund ist der, dass einige Entwickler externe Abhängigkeiten vermeiden wollen (wobei das nicht wirklich funktioniert, da nahezu jede eingebundene Java-Bibliothek selbst auf log4j baut). Der zweite Grund ist, dass für viele Projekte JUL einfach reicht. In der Praxis bedeutet dies für größere Projekte, dass mehrere Logging-Konfigurationen das eigene Programm verschmutzen, da jede Logging-Implementierung unterschiedlich konfiguriert wird.

 

Zum Seitenanfang

16.9.2    Logging mit java.util.logging Zur vorigen ÜberschriftZur nächsten Überschrift

Mit der Java-Logging-API lässt sich eine Meldung schreiben, die sich dann zur Wartung oder zur Sicherheitskontrolle einsetzen lässt. Die API ist einfach:

Listing 16.5     src/main/java/com/tutego/insel/logging/CULDemo.java, JULDemo

package com.tutego.insel.logging;



import static java.time.temporal.ChronoUnit.MILLIS;

import static java.time.Instant.now;

import java.time.Instant;

import java.util.logging.Level;

import java.util.logging.Logger;



public class JULDemo {



private static final Logger log = Logger.getLogger( JULDemo.class.getName() );



public static void main( String[] args ) {

Instant start = now();

log.info( "Wir starten mit JUL" );



try {

log.log( Level.INFO, "In {0} Sekunden geht es los", 0 );

throw null; // Fehler erzeugen

}

catch ( Exception e ) {

log.log( Level.SEVERE, "Oh Oh", e );

}



log.info( () -> String.format( "Laufzeit %s ms", start.until( now(), MILLIS ) ) );

}

}

Lassen wir das Beispiel laufen, folgt auf der Konsole die Warnung:

Mai 21, 2017 10:24:57 NACHM. com.tutego.insel.logging.JULDemo main

INFORMATION: Wir starten mit JUL

Mai 21, 2017 10:24:57 NACHM. com.tutego.insel.logging.JULDemo main

INFORMATION: In 0 Sekunden geht es los

Mai 21, 2017 10:24:57 NACHM. com.tutego.insel.logging.JULDemo main

SCHWERWIEGEND: Oh Oh

java.lang.NullPointerException

at com.tutego.insel.logging.JULDemo.main(JULDemo.java:19)



Mai 21, 2017 10:24:57 NACHM. com.tutego.insel.logging.JULDemo main

INFORMATION: Laufzeit 131 ms

Das Logger-Objekt

Zentral ist das Logger-Objekt, das über Logger.getAnonymousLogger() oder über Logger.getLogger(String name) geholt werden kann, wobei name in der Regel mit dem voll qualifizierten Klassennamen belegt ist. Oft ist der Logger als private statische finale Variable in der Klasse deklariert.

Loggen mit Log-Level

Nicht jede Meldung ist gleich wichtig. Einige sind für das Debuggen oder wegen der Zeitmessungen hilfreich, doch Ausnahmen in den catch-Zweigen sind enorm wichtig. Damit verschiedene Detailgrade unterstützt werden, lässt sich ein Log-Level festlegen. Er bestimmt, wie »ernst« der Fehler bzw. eine Meldung ist. Das ist später wichtig, wenn die Fehler nach ihrer Dringlichkeit aussortiert werden. Die Log-Level sind in der Klasse Level als Konstanten deklariert:[ 247 ](Da das Logging-Framework in Version 1.4 zu Java stieß, nutzt es noch keine typisierten Aufzählungen, denn die gibt es erst seit Java 5. )

  • FINEST (kleinste Stufe)

  • FINER

  • FINE

  • CONFIG

  • INFO

  • WARNING

  • SEVERE (höchste Stufe)

Zum Loggen selbst bietet die Logger-Klasse die allgemeine Methode log(Level level, String msg) bzw. für jeden Level eine eigene Methode:

Level

Aufruf über log(…)

spezielle Log-Methode

SEVERE

log(Level.SEVERE, msg)

severe(String msg)

WARNING

log(Level.WARNING, msg)

warning(String msg)

INFO

log(Level.INFO, msg)

info(String msg)

CONFIG

log(Level.CONFIG, msg)

config(String msg)

FINE

log(Level.FINE, msg)

fine(String msg)

FINER

log(Level.FINER, msg)

finer(String msg)

FINEST

log(Level.FINEST, msg)

finest(String msg)

Tabelle 16.9     Log-Level und Methoden

Alle diese Methoden setzen eine Mitteilung vom Typ String ab. Sollen eine Ausnahme und der dazugehörende Strack-Trace geloggt werden, müssen Entwickler zu folgender Logger-Methode greifen, die auch schon das Beispiel nutzt:

  • void log(Level level, String msg, Throwable thrown)

Die Varianten von severe(…), warning(…) usw. sind nicht überladen mit einem Parametertyp Throwable.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Spring Boot 3 und Spring Framework 6

Spring Boot 3 und Spring Framework 6




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo




Copyright © Rheinwerk Verlag GmbH 2024

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.

Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern