Gutes Logging ist heute unumgänglich, wenn man als Entwickler Probleme und Fehler nachvollziehen oder reproduzieren möchte, die im produktiven Betrieb der selbstentwickelten Anwendung aufgetreten sind. Vor allem bei komplexen Anwendungen oder technisch unbedarften Anwendern kommt man selten allein mit der oft mageren Fehlerbeschreibung des Anwenders weiter. Hier sind gute Logs Gold wert, aus denen hervorgeht, was wann in der Anwendung passiert ist.
tinylog tritt mit der Vision an, Logging möglichst einfach und komfortabel zu gestalten. So entfällt in tinylog das obligatorische Erzeugen einer Logger-Instanz für jede Klasse, Zahlen können direkt in Platzhaltern formatiert werden und die Konfiguration erfolgt durch eine kompakte properties-Datei. Das Open-Source-Logging-Framework kann in Java EE, Spring Boot, Android und natürlich Standard-Java eingesetzt werden.
Das Logging-API und das Logging-Backend sind in tinylog klar voneinander getrennt und können bei Bedarf ausgetauscht werden. So gibt es neben dem Logging-API für Java noch separate für Kotlin und Scala optimierte APIs. Beim Einsatz von Web- oder Application-Servern bzw. von Spring Boot kann statt des nativen Logging-Backends von tinylog die jeweilige Herstellerimplementierung genutzt werden. tinylog selbst ist ein schlankes Logging-Framework. In tinylog 2.3 sind die beiden JARs – das Logging-API für Java und das native Logging-Backend – zusammen gerade einmal 165 KB groß.
Mit tinylog erfolgt das Logging über eine statische Klasse. Das bedeutet, dass im Gegensatz zu anderen Logging-Frameworks das Erzeugen einer Logger-Instanz für jede Klasse, in der geloggt werden soll, entfällt. Dementsprechend lässt sich unser erster Logeintrag mit nur einem einzelnen Methodenaufruf ausgeben.
import org.tinylog.Logger;
public class Application {
public static void main(String[] args) {
Logger.info("Hallo Log!");
}
}
Selbst ohne Konfiguration gibt tinylog diesen Logeintrag bereits in der Konsole aus. Standardmäßig werden geloggte Nachrichten zusammen mit Datum, Uhrzeit, Thread, Klasse, Methode und Logging-Level ausgegeben.
2021-08-24 13:18:39 [main] Application.main()
INFO: Hallo Log!
Das Ausgabeziel und Ausgabeformat können frei konfiguriert werden. Als Ausgabeziel werden neben der Konsole auch Logdateien, Datenbanktabellen und Logcat unterstützt. Nach der Betrachtung des Logging-API werden die einzelnen Konfigurationsoptionen zur Ausgabe von Logeinträgen noch ausführlich vorgestellt.
In echten Anwendungen möchte man üblicherweise nicht nur statischen Text ausgeben, sondern reale Daten. Mit tinylog können – wie auch mit anderen modernen Logging-Frameworks – Platzhalter in Form von geschweiften Klammern in Texten definiert werden. Dabei werden alle Platzhalter zur Laufzeit durch die übergebenen Argumente ersetzt. Das erfolgt allerdings nur dann, wenn das entsprechende Logging-Level der Lognachricht auch zur Ausgabe aktiviert ist. Bei deaktivierten Logging-Leveln spart sich tinylog die notwendige Rechenzeit zur Stringkonkatenation.
Logger.info...