Zum Hauptinhalt springen

Simple Logging Facade for Java (SLF4J)

Simple Logging Facade for Java (SLF4J) stellt eine externe Java-Bibliothek dar, die das Protokollieren in Java-Anwendungen ermöglicht. Protokollierung (Logging) ist ein wesentlicher Bestandteil der Softwareentwicklung und -wartung und bietet zahlreiche Vorteile wie Fehlerbehebung, Überwachung, Audit, Compliance, Debugging, Leistungsanalyse sowie Benutzerunterstützung. Durch die effektive Nutzung von Protokollierung kann die Zuverlässigkeit, Sicherheit und Leistung einer Anwendung erheblich verbessert werden.

Protokollierungs-Level

SLF4J definiert verschiedene Protokollierungs-Level, die die Schwere oder Wichtigkeit der zu protokollierenden Nachrichten angeben.

LevelBeschreibung
TRACESehr detaillierte Informationen für die Fehlersuche (z.B. Methodenname)
DEBUGDetaillierte Informationen für den Entwickler (z.B. Variablenwert)
INFOAllgemeine Informationsmeldungen, die den normalen Betrieb der Anwendung beschreiben
WARNWarnungen, die auf potenzielle Probleme hinweisen, die jedoch nicht sofort behoben werden müssen
ERRORFehler, die den normalen Betrieb der Anwendung beeinträchtigen und ggbfs. den sofortigen Abbruch der Anwendung erfordern

Protokollierungs-Implementierungen

Die Art der Speicherung von Protokollen in einer Anwendung, die SLF4J verwendet, hängt von der konkreten Implementierung ab. SLF4J selbst ist dabei nur eine Fassade und benötigt eine konkrete Implementierung, um die tatsächliche Protokollierung durchzuführen. Eine der am weitesten verbreiteten Protokollierungs-Bibliotheken für Java ist Log4J, welches die Ausgabe von Protokollen auf der Konsole sowie in Protokoll-Dateien ermöglicht.

Beispiel

Für die Klasse MainClass wird ein Logger initialisiert, mit dessen Hilfe verschiedene Nachrichten in der Datei logs/app.log protokolliert werden.

Names.java
public class Names {

private final static Logger logger = LoggerFactory.getLogger(Names.class);

public static List<String> getNames(File file) throws IOException {
List<String> names = new ArrayList<>();
logger.info("Name list has been initialized successfully");

if (!file.exists()) {
logger.error("File {} does not exist", file);
throw new IOException();
}

Scanner scanner = new Scanner(file);
logger.info("File Scanner has been initialized successfully");

while (scanner.hasNextLine()) {
String name = scanner.nextLine();
logger.debug(name);
names.add(name);
}
logger.info("{} names have been read", names.size());

scanner.close();
logger.info("File {} has been closed successfully", file);

return names;
}

}