Java-Logging-Framework tinylog 2.2 komprimiert Log-Dateien mit GZIP

Das quelloffene Logging-Framework für Java, Kotlin und Scala bringt GZIP-Kompression für Log-Dateien sowie Unterstützung für modulare JLink-Laufzeit-Images.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen
Von
  • Alexander Neumann

Mit der neuen Version 2.2 kann das quelloffene Java-Logging-Framework tinylog Log-Dateien komprimieren. Außerdem gibt es zwei neue Token zur Formatierung und eine Migration von automatischen Modulen auf reguläre Jigsaw-Module.

Bei der erwähnten Komprimierung setzt das Framework auf das GZIP-Format. Wenn sie im Rolling-File-Writer aktiviert ist, schreibt tinylog trotzdem zunächst alle Log-Einträge als Plain-Text in die aktuelle Log-Datei. Sobald tinylog allerdings zur nächsten Log-Datei übergeht, wird die alte Log-Datei im Hintergrund komprimiert. Damit lässt sich die aktuelle Log-Datei weiterhin als Plain-Text im Texteditor öffnen. Die alten Log-Dateien benötigen allerdings aufgrund der GZIP-Komprimierung weniger Speicherplatz.

Der Rolling-File-Writer ist dazu gedacht, in regelmäßigen Abständen eine neue Log-Datei mit einem neuen Dateinamen zu starten. Das erschwert offenbar die automatische Überwachung der aktuellen Log-Datei durch Monitoring-Tools, da diese in der Regel einen statischen Dateinamen für Log-Dateien erwarten. In der neuen Version kann tinylog optional einen Hard-Link mit einem statischen Dateinamen für die jeweils aktuelle Log-Datei erzeugen. Das Framework aktualisiert den Hard-Link bei jedem Start einer neuen Log-Datei, sodass er immer auf die aktuelle Log-Datei zeigt. Aus Sicht von Monitoring-Tools verhält sich der Hard-Link wie eine reguläre Datei, deren Inhalt beobachtet werden kann.

tinylog 2.2 führt zur Formatierung der Ausgabe von Log-Einträgen zwei neue Token ein. Mit dem Uptime-Tokens lässt sich für jeden Log-Eintrag ausgeben, wie lange die Anwendung bereits zu diesem Zeitpunkt läuft. Der Level-Code-Token hingegen kann den Severity Level eines Log-Eintrags als numerischen Wert ausgeben.

In der neuen Version migriert tinylog 2.2 von automatischen Modulen auf reguläre Jigsaw-Module. Dies bedeutet, dass jedes JAR eine eigene Module-Info-Datei mitbringt. Damit sind die Abhängigkeiten transparent und können durch das Java Platform Module System (JPMS) erkannt und aufgelöst werden. In der Praxis bedeutet da, dass tinylog jetzt vollständig mit JLink kompatibel ist und sich auch in selbst erstellten modularen Laufzeit-Images verwenden lässt.

In der neuen Version wirft tinylog eine UnsupportedOperationException, wenn versucht wird, eine eingefrorene Konfiguration zu verändern. Des Weiteren gibt es jetzt einen Getter Configuration.isFrozen(), um den Konfigurationsstatus zur Laufzeit auslesen zu können. Zur Ausgabe getaggter Log-Einträge lassen sich in der neuen Version des Logging-Frameworks einem Writer in der Konfiguration mehrere Tags zuweisen. Wenn einem Writer ein oder mehrere Tags zugewiesen sind, gibt dieser nur Log-Einträge aus, die mit einem passenden Tag versehen sind, und ignoriert die anderen.

Mit der neuen Version stellt tinylog die Unterstützung für Java 6 ein und setzt stattdessen mindestens Java 7 auf regulären JVMs voraus. Das Logging-Framework wird allerdings weiterhin als Java-6-Bytecode ausgeliefert. Der Grund ist die Kompatibilität zu Android. Unter Android setzt tinylog nur das API-Level 1 voraus. Das Logging-Framework ist also weiterhin mit allen Android-Versionen kompatibel.

Weitere Informationen finden dich auf der tinylog-Website und hier insbesondere in der Ankündigung. Die wesentlichen Neuerungen wurden schon zum Release Candidate vorgestellt.

(ane)