Kotlin Monitoring & Logging: Bugs in Production vermeiden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum eine „stille“ Kotlin-Anwendung eine Zeitbombe ist

\n\n

Stellen Sie sich vor: Sie haben einen Kotlin-Service gestartet, er läuft wie geschmiert. Die Nutzer sind zufrieden, die Metriken sind grün. Doch eines schönen Tages steigt die Last, die Latenzzeit wächst – und Sie haben keine Ahnung, warum. Ohne Logging und Monitoring sind Sie wie ein Kapitän ohne Karte und Radar. In diesem Artikel zeigen wir Ihnen, wie Sie Ihre Anwendung von einer „Blackbox“ in ein transparentes System verwandeln, in dem jeder Fehler sofort sichtbar ist.

\n\n

Wir kopieren keine Dokumentation. Stattdessen gibt es echte Anwendungsfälle, fertige Code-Snippets und Architekturlösungen, die in der Produktion funktionieren. Los geht's.

\n\n

Das große Ganze: Logging vs. Monitoring

\n\n

Bevor wir Code schreiben, klären wir die Begriffe. Logging ist die Aufzeichnung von Ereignissen (Fehlern, Warnungen, Debug-Informationen) in strukturierter oder textueller Form. Monitoring ist die Erfassung von Metriken (Antwortzeit, Anzahl der Anfragen, CPU-Auslastung) und deren Visualisierung. Im Idealfall arbeiten sie zusammen: Logs dienen der detaillierten Analyse von Vorfällen, Metriken der schnellen Erkennung von Anomalien.

\n\n

Logging in Kotlin einrichten: Vom Einfachen zum Komplexen

\n\n

Die richtige Bibliothek wählen: SLF4J + Logback – der Goldstandard

\n\n

Kotlin harmoniert hervorragend mit dem Java-Ökosystem, daher sind SLF4J (Fassade) und Logback (Implementierung) die erste Wahl. Sie sind leichtgewichtig, leistungsstark und unterstützen asynchrones Logging.

\n\n

Fügen Sie Folgendes in Ihre build.gradle.kts ein:

\n\n
implementation("ch.qos.logback:logback-classic:1.4.14")\nimplementation("io.github.microutils:kotlin-logging-jvm:3.0.5")
\n\n

kotlin-logging ist ein dünner Wrapper um SLF4J, der den Code sauberer macht. Vergleichen Sie:

\n\n

Ohne Wrapper:

\n
private val logger = LoggerFactory.getLogger(MyService::class.java)\nlogger.info("User {} logged in", userId)
\n\n

Mit kotlin-logging:

\n
private val logger = KotlinLogging.logger {}\nlogger.info { "User $userId logged in" }
\n\n

Die verzögerte String-Auswertung ist ein Bonus für die Leistung: Der String wird nur erstellt, wenn das Log-Level aktiviert ist.

\n\n

Logback-Konfiguration: Strukturierte Logs sind ein Muss

\n\n

Erstellen Sie eine logback.xml in src/main/resources:

\n\n
<configuration>\n    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">\n        <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>\n    </appender>\n\n    <root level="INFO">\n        <appender-ref ref="CONSOLE"/>\n    </root>\n</configuration>
\n\n

Wir verwenden LogstashEncoder – er wandelt Logs in JSON um. Das ist entscheidend, wenn Sie Logs an Elasticsearch, Loki oder einen anderen Aggregator senden. JSON-Logs lassen sich leicht parsen, filtern und analysieren.

\n\n

Vergessen Sie nicht, die Abhängigkeit hinzuzufügen:

\n
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
\n\n

Aussagekräftige Logs schreiben: Der Kontext ist alles

\n\n

Logs wie „Fehler aufgetreten“ sind nutzlos. Fügen Sie MDC (Mapped Diagnostic Context) hinzu – das sind wie Tags für Ihre Logs.

\n\n
import org.slf4j.MDC\n\nclass OrderService {\n    private val logger = KotlinLogging.logger {}\n\n    fun processOrder(orderId: String, userId: String) {\n        MDC.put("orderId", orderId)\n        MDC.put("userId", userId)\n        try {\n            logger.info { "Verarbeite Bestellung" }\n            // Geschäftslogik\n        } catch (e: Exception) {\n            logger.error(e) { "Bestellverarbeitung fehlgeschlagen" }\n        } finally {\n            MDC.clear()\n        }\n    }\n}
\n\n

Jetzt können Sie im Log-Aggregator in Sekundenschnelle alle Einträge zu einer bestimmten Bestellung oder einem Benutzer finden.

\n\n

Monitoring von Kotlin-Anwendungen:

Blogs

Buchempfehlungen