8. März 2026

console.log reicht erstmal, und andere Lügen die ich mir selbst erzählt hab

Die API ist mir die halbe Nacht um die Ohren geflogen und ich hab's nicht gemerkt. Dank Pino weiß ich jetzt warum. Und dank Sonntag hab ich jetzt kein Wochenende mehr.

Technical DebtLoggingPinoDevOps

Dat hat sich aufgestaut

Jeder der schonmal ein Projekt von null aufgebaut hat kennt den Moment. Du bist tief im Flow, irgendwas funktioniert grade nicht, also schreibst du schnell ein console.log("hier bin ich") rein, checkst ob der Wert stimmt, weiter. Geht doch. Reicht doch.

Und dann machst du das nochmal. Und nochmal. Und irgendwann ist die Codebasis ein stilles Grab voller Geister die dir zuflüstern dass alles okay ist. Bis Nachts was kaputt geht.

Es ist nachts etwas kaputt gegangen

Freitagnacht. Die API ist gegen eine Wand gefahren. Fehler über Fehler, irgendwas in der Verarbeitungspipeline, und ich hab am nächsten Morgen vor dem Rechner gesessen und genau… nichts gewusst. Wann hat’s angefangen? Welcher Request hat’s getriggert? Wie oft ist das passiert?

Keine Ahnung. Weil mein “Logging” aus einem Haufen console.logs bestand, die mir sauber die Serverausgabe vollgespamt haben, ohne Timestamp, ohne Level, ohne irgendeine Struktur die mir beim Debuggen hätte helfen können. Ich hab Rauschen gehabt, keine Information.

Das war der Moment wo ich mir ehrlich gesagt eingestehen musste: Ich hab das absichtlich vor mir hergeschoben. Nicht weil ich nicht wusste dass richtiges Logging wichtig ist. Sondern weil “später” immer bequemer ist als jetzt.

Sonntag gehört jetzt Pino

Also hab ich den Sonntag geopfert. Pino rein, alles umgebaut.

Pino ist schnell, strukturiert, gibt dir JSON-Output der sich vernünftig parsen und durchsuchen lässt. Kein Overkill, kein Winston-Konfigurations-Labyrinth, einfach ein Logger der seinen Job macht ohne Theater.

Das eigentliche Problem war nicht Pino einbinden. Das dauert eine Stunde. Das eigentliche Problem war, dass console.log überall verstreut war. In Middlewares, in Service-Klassen, in ein paar Stellen wo ich ehrlich gesagt nicht mehr sicher bin warum ich überhaupt was geloggt hab. Alles raus, alles durch strukturierte Log-Calls ersetzen, Levels vergeben, Context mitgeben.

Und dann natürlich: Tests.

Nicht irgendwelche Tests. Ich musste für jede relevante Stelle prüfen ob der Logger überhaupt aufgerufen wird, mit dem richtigen Level, mit den richtigen Feldern im Context. Spies auf den Logger, Output abfangen, checken ob ein geworfener Fehler auch als error landet und nicht irgendwo als info durchrutscht weil ich einen Try-Catch falsch gebaut hab. Keine aufregenden Tests. Keine aufregenden Tests. Aber genau die Sorte Tests die sicherstellen dass Freitagnacht kein zweites Mal so ausgeht.

Technical Debt ist immer ehrlicher als du

Dat Ding an Technical Debt is: Der Hund wartet. Der hat alle Zeit der Welt. Du dagegen irgendwann nicht mehr.

Ich hab mir eingeredet dat console.log während der Entwicklung klargeht und ich dat Kram “vor dem nächsten Release” ordentlich mache. Dat is die klassische Falle. Es gibt keinen Moment wo Technical Debt sich meldet wenn’s passt. Der meldet sich immer dann wenn de eigentlich schon mit einem Bein im Feierabend stehst und et richtig wehtut.

Freitagnacht hat et wehgetan. So richtig.

Ob’s reicht?

Pino läuft. Die Logs haben Struktur. Beim nächsten Absturz weiß ich in dreißig Sekunden wo das Problem liegt statt in drei Stunden.

Aber ich weiß auch: Irgendwo im Code gibt’s noch Ecken die ich nicht angefasst hab. Irgendein Edge Case der gerade still vor sich hin bricht während ich das hier schreibe.

Der Stein liegt oben. Bis er’s nicht mehr tut.