Bei der Frage, was genau Logging sein soll, sind uns schon allerlei Definitionen und Negativbeispiele untergekommen. Es kommt leider noch viel zu häufig vor, dass in einer Anwendung gar kein Logging betrieben wird oder man sich darauf beschränkt, im Fehlerfall ein Log mit dem gesamten Stacktrace herauszugeben. Eine weitere (schlechte) Methode zu loggen besteht darin, an allen Stellen, an denen jemals etwas passiert ist, ein Log zu setzen und keine Loglevel festzulegen.
Wir würden Logging folgendermaßen definieren:
Logging ist das Protokollieren von Prozessen im Programmablauf. Hierbei werden, je nach Umgebung und Wichtigkeit des Logs, verschiedene Indikatoren (Loglevel) und Informationen im Log bereitgestellt. Ziel sollte es hierbei sein, dass das Log einen Mehrwert liefert und die User nicht mit Informationen überlädt.
Ein Log der keinen nennenswerten Mehrwert liefert, sieht z.B. so aus:
2023/01/04 15:08:39 INFO respond successful
Die einzige Information, die wir diesem Log entnehmen können, ist, dass eine Antwort zu einem API-Call erfolgreich übermittelt wurde.
Das gleiche Log, das uns jedoch einen Mehrwert liefert, könnte so aussehen:
2023/01/04 15:08:39 INFO respond with status 200 for /api/test after 200ms span_id:1234
Hier erhalten wir als Information den Statuscode, die aufgerufene URL, die Zeit, die unsere Applikation zur Beantwortung der Frage benötigt hat, und eine Span ID, mit der wir unseren API-Call mit Tracing analysieren können. Mehr Informationen zu Tracing gibt es hier im Blogartikel.