Log Log – who's there? tinylog!

tinylog 2.3: Logging-Ausgaben detailliert konfigurieren

Martin Winandy

© Shutterstock / Paolo De Gasperis

Mit der aktuellen Version 2.3 ermöglicht das quelloffene Java-Logging-Framework tinylog, die Ausgabe von Log-Einträgen detaillierter zu konfigurieren. So gibt eine neue Monthly-Policy, konfigurierbare Ausgabe-Streams für die Konsole und die Option, die Konfiguration für das Logging-Framework als JSON- oder YAML-Datei zu erstellen.

Ausgabe von Log-Einträgen

In tinylog ist es mit dem Rolling-File-Writer möglich, nach konfigurierbaren Events automatisch eine neue Log-Datei zu starten. Mit der neuen Monthly-Policy kann tinylog jetzt solch ein Event automatisch einmal pro Monat am jeweils Monatsersten triggern. Wenn die Monthly-Policy aktiviert ist, wechselt der Rolling-File-Writer also immer am ersten Tag des Monats die Log-Datei und startet eine neue. Die Uhrzeit ist dabei frei konfigurierbar. Standardmäßig geschieht der Wechsel zur neuen Log-Datei um Mitternacht.

Beispiel tinylog.properties:

writer          = rolling file             # Rolling-File-Writer
writer.policies = monthly: 03:00           # 3:00 Uhr am Monatsersten
writer.file     = log_{date: yyyy-MM}.log  # z.B. log_2021-04.log

Der Console-Writer gibt in tinylog standardmäßig Info-, Debug- und Trace-Log-Einträge über den Standard-Output-Stream sowie Error- und Warning-Log-Einträge über den Standard-Error-Stream aus. Daher werden im Ausgabefenster der üblichen IDEs Error- sowie Warning-Log-Einträge in roter Schrift angezeigt und alle anderen in schwarzer Schrift. Auf diese Weise lassen sich Fehler und Warnungen leicht erkennen. In der neuen Version von tinylog lässt sich frei konfigurieren, ab wann Log-Einträge über den Standard-Error-Stream anstatt über den Standard-Output-Stream ausgegeben werden sollen.

Beispiel tinylog.properties:

writer        = console   # Console-Writer
writer.stream = [email protected]  # Standard-Error-Stream schon ab Info-Level

Die Ausgabe einzelner Log-Einträge kann in tinylog nicht nur über Klassennamen, sondern auch über Tags gefiltert werden. Tags lassen sich dabei direkt über die Logger-Klasse zuweisen: Logger.tag("foo").info("Hello World"). In der neuen Version 2.3 ist es möglich, abhängig von Tags zu steuern, ab welchem Logging-Level tinylog Log-Einträge tatsächlich ausgegeben soll. Zum Beispiel können für einen Tag alle Log-Einträge ausgeben werden und für einen anderen Tag nur Fehler und Warnungen. Dabei wird der Tag über ein @-Zeichen mit dem niedrigsten auszugebenden Logging-Level verknüpft.

Beispiel tinylog.properties:

writer     = console              # Console-Writer
writer.tag = [email protected], [email protected]  # Tags mit Logging-Level

JSON- und YAML-Konfiguration

Üblicherweise wird tinylog über eine properties-Datei konfiguriert. Dementsprechend sind auch alle vorherigen Konfigurationsbeispiele im Artikel im Properties-Dateiformat. Auf GitHub gibt es nun ein neues Community-Projekt, das tinylog 2.3 um die Funktion erweitert, die Konfiguration auch als JSON- oder YAML-Datei zu laden (https://github.com/Git5000/tinylog_extra_stuff).

Beispiel für tinylog.json:

{
   "writer": {
      "type"    : "rolling file",
      "policies": "monthly: 03:00",
      "file"    : "log_{date: yyyy-MM}.log"
   }
}

Beispiel für tinylog.yaml:

writer:
   type:     rolling file
   policies: "monthly: 03:00"
   file:     "log_{date: yyyy-MM}.log"

Platzhalter

Bei Verwendung des Rolling-File-Writers wird normalerweise ein Platzhalter im Dateinamen verwendet, damit alte Log-Dateien beim Start einer neuen Log-Datei nicht überschrieben werden. Hierfür können auch mehrere Platzhalter miteinander kombiniert werden.

Beispiel tinylog.properties:

writer      = rolling file
writer.file = log_{date: yyyy-MM-dd}_{count}.log

In dem Beispiel beinhaltet der Name der Log-Datei neben dem Datumsplatzhalter auch einen Count-Platzhalter als fortlaufenden Zähler. In der aktuellen Version 2.3 berücksichtigt der Count-Platzhalter nun einen voranstehenden Datumsplatzhalter bei der Zählung. Dies bedeutet für das Beispiel, dass die Zählung jeden Tag wieder bei null startet. So lässt sich am Namen der Logdatei erkennen, die wievielte es für den jeweiligen Tag ist.

Mit tinylog können Platzhalter in Log-Nachrichten verwendet werden, die zur Laufzeit aufgelöst werden. Eine Möglichkeit, Nachrichten zu formatieren, bietet das choice-Format. Die neue Version 2.3 ermöglicht dieses nun auch mit mehreren integrierten Format-Platzhaltern zu verwenden. So lassen sich selbst komplexe Log-Nachrichten konstruieren.

Beispiel Java:

Logger.info("Ausgaben: {0#keine|0<{0.00} €|1000#{#,###} €}", euros);

Euro-Beträge von exakt 0 € werden in dem Java-Beispiel durch das Wort keine repräsentiert. Beträge unter 1.000 € werden hingegen auf den Cent genau als Dezimalzahl ausgeben. Bei allen noch höheren Beträgen wird auf den vollen Euro-Betrag gerundet und zwecks Lesbarkeit werden Tausendertrennzeichen eingefügt.

In dem Java-Beispiel fällt auf, dass Logger großgeschrieben ist und in der Tat wird die Logging-Methode info direkt an der Logger-Klasse aufgerufen. Im Gegensatz zu anderen Logging-Frameworks ist tinylogs Logger-Klasse statisch. Mit tinylog ist es daher nicht notwendig, für jede Klasse eine eigene Logger-Instanz zu erzeugen, wenn in dieser geloggt werden soll.

tinylog 2.3 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 eingesetzt werden.

Verwandte Themen:

Geschrieben von
Martin Winandy

Martin Winandy ist Diplom(BA)-Informatiker und Initiator sowie Hauptentwickler von tinylog. Seit 15 Jahren ist er als engagierter Softwareentwickler in verschiedensten Projekten im Java-Ökosystem tätig. Sein Projektportfolio reicht von Jakarta EE (vormals Java EE) und Spring Boot mit Angular- oder React-Frontends im Webbereich bis hin zu Eclipse RCP für klassische Client-Anwendungen. In seiner freien Zeit engagiert er sich in Open-Source-Projekten wie tinylog.

Kommentare

2
Hinterlasse einen Kommentar

avatar
4000
1 Kommentar Themen
1 Themen Antworten
1 Follower
 
Kommentar, auf das am meisten reagiert wurde
Beliebtestes Kommentar Thema
2 Kommentatoren
Martin WinandyGunnar Hilling Letzte Kommentartoren
  Subscribe  
Benachrichtige mich zu:
Gunnar Hilling
Gast
Gunnar Hilling

Moment, das ist _nicht_ von Ceki Gülcü? Bemerkenswert 😂

Martin Winandy
Gast
Martin Winandy

Etwas Abwechslung tut gut 😉