Ausnahmen bestätigen die Regel

tinylog 2.1: Java-Logging-Framework bringt übersichtlichere Exceptions

Martin Winandy

© Shutterstock / Alberto Masnovo

Die aktuelle Version des Logging-Frameworks für Java, tinylog 2.1, bringt zahlreiche neue Features. So können Exceptions übersichtlicher ausgegeben, verschiedene Konfigurationen für unterschiedliche Umgebungen hinterlegt sowie Umgebungsvariablen und System-Properties vorbelegt werden.

Nachdem im August tinylog 2.0 erschienen ist, folgt nun mit der Version 2.1 das erste Feature-Update für den aktuellen Release-Zyklus des Java-Logging-Frameworks.

tinylog 2.1: Das ist neu

Standardmäßig gibt tinylog Exceptions mit dem kompletten Stack Trace und allen verketteten Cause Exceptions aus. Dies kann bei größeren Applikationen mit einem umfangreichen Technologie-Stack schnell unübersichtlich werden. Um die Ausgabe zu reduzieren und übersichtlicher zu gestalten, führt tinylog in der Version 2.1 sogenannte Throwable-Filter ein. Diese lassen sich frei konfigurieren und miteinander verketten.

Zum Beispiel ist es möglich, ein Throwable-Filter mit einer „Blacklist“ zu erstellen, der bestimmte Packages und Klassen bei der Ausgabe aus dem Stack Trace entfernt. Auf diesem Weg lassen sich generierte und interne Klassen ausfiltern. Andersherum kann auch ein Throwable-Filter mit einer „Whitelist“ erstellt werden. Dies bedeutet, dass alle Elemente des Stack Traces ausgefiltert werden, deren Klassenname beziehungsweise Package nicht aufgelistet sind. Ebenfalls ist es möglich, Stack Traces ab einer definierten Tiefe automatisch abzuschneiden.

Manchmal ist es in Java notwendig, eine Checked Exception in einer Runtime Exception zu verpacken, wenn eine Schnittstelle das Werfen der entsprechenden Checked Exception verbietet. Diesen üblichen Workaround kann tinylog 2.1 bei der Ausgabe rückgängig machen, indem das Logging-Framework die Runtime Exception wieder auspackt und nur die eigentliche Checked Exception ausgibt.

Java Whitepaper

Gratis-Dossier: Java 2020 – State of the Art

GraalVM, Spring Boot 2.2, Kubernetes, Domain-driven Design & Machine Learning sind einige der Themen, die Sie in unserem brandneuen Dossier 2020 wiederfinden werden!

Üblicherweise wird tinylog über eine zentrale tinylog.properties-Datei konfiguriert. Mit der Version 2.1 kann das Logging-Framework die Konfiguration je nach Umgebung auch automatisch aus den Dateien tinylog-test.properties und tinylog-dev.properties laden. Damit lassen sich einfach verschiedene Konfigurationen für Entwicklungs-, Test- und Produktionsumgebung erstellen. In tinylog war es zudem bereits zuvor möglich, in der Konfigurationsdatei Umgebungsvariablen und System-Properties zu verwenden. Allerdings kann es zu Problemen kommen, wenn kein Wert zur Laufzeit gesetzt sein sollte. Um dies zu verhindern, lassen sich mit der Version 2.1 Defaultwerte für Umgebungsvariablen und System-Properties konfigurierten, die verwendet werden, wenn zur Laufzeit eine Umgebungsvariable oder ein System-Property nicht verfügbar sein sollte.

tinylog bietet, das ist bekannt, separate Logging-APIs für Java, Kotlin und Scala. Um die Verwendung des Logging-Frameworks unter Scala zu vereinfachen, hat sich das Namensschema des API-Artefakts geändert und beinhaltet jetzt die Scala-Versionsnummer, wie unter Scala üblich. Der neue Artefaktname lautet tinylog-api-scala_2.12. Die geschweiften Klammern, die in Logging-Nachrichten als Platzhalter verwendet und zur Laufzeit durch konkrete Werte ersetzt werden können, wurden überarbeitet. Die Verwendung solcher kann nämlich die Ausgabe von geschweiften Klammern selbst erschweren, wenn zum Beispiel JSON auszugeben ist und tinylog die Klammern nicht als Platzhalter interpretieren soll. Mit der Version 2.1 lassen sich in diesem Fall geschweifte Klammern oder komplette Phrasen durch Hochkommas escapen.

tinylog 2.1 kann auf der Projekt-Webseite ab sofort heruntergeladen werden. Das Logging-Framework steht unter der Open-Source-Lizenz Apache License 2.0 und kann somit frei verwendet werden.

Geschrieben von
Martin Winandy
Martin is a Java developer for Eclipse RCP and Jave EE applications. He supports multinational vehicle manufactures and technical inspection associations in developing custom product data management solutions. Independent of his job, Martin is actively involved in open source projects and is the initiator of tinylog.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: