Logging in Kotlin-Anwendungen: Best Practices für Anfänger

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

Logging in Kotlin-Anwendungen: Best Practices für Anfänger

\n\n

Logging ist nicht nur das Aufzeichnen von Nachrichten in eine Datei. Es ist ein System, das dem Entwickler hilft, in Echtzeit zu verstehen, was in der Anwendung passiert, Fehler schnell zu finden und das Benutzerverhalten zu analysieren. In diesem Artikel werden wir erläutern, wie man das Logging in Kotlin-Anwendungen richtig organisiert, welche Bibliotheken man verwendet und welche Fehler man vermeiden sollte.

\n\n

Warum ist Logging notwendig?

\n

Logging löst mehrere zentrale Aufgaben:

\n
    \n
  • Debugging: Ermöglicht es, die Aufrufsequenz und Variablenwerte ohne Verwendung eines Debuggers zu sehen.
  • \n
  • Monitoring: Hilft, den Zustand der Anwendung in der Produktionsumgebung zu überwachen.
  • \n
  • Audit: Zeichnet Benutzeraktionen und Systemereignisse auf.
  • \n
  • Leistung: Mit Logs können Engpässe und Verzögerungen identifiziert werden.
  • \n
\n\n

Beliebte Bibliotheken für Logging in Kotlin

\n

Im Kotlin- und JVM-Ökosystem gibt es mehrere bewährte Lösungen. Betrachten wir die wichtigsten:

\n
    \n
  • SLF4J (Simple Logging Facade for Java) — eine Fassade, die das Logging selbst nicht implementiert, sondern eine einheitliche API für verschiedene Implementierungen (Logback, Log4j2 usw.) bereitstellt.
  • \n
  • Logback — die beliebteste Implementierung von SLF4J. Schnell, flexibel, mit Unterstützung für rollierende Dateien.
  • \n
  • Log4j 2 — eine leistungsstarke Bibliothek mit Unterstützung für asynchrones Logging und Filterung.
  • \n
  • Kotlin Logging — ein praktischer Wrapper über SLF4J, der Inline-Funktionen verwendet, um den Overhead zu minimieren.
  • \n
\n\n

Konfiguration von Logback in einem Kotlin-Projekt

\n

Betrachten wir die schrittweise Konfiguration von Logback – der beliebtesten Lösung für Kotlin/JVM-Anwendungen.

\n\n

Schritt 1: Abhängigkeiten hinzufügen

\n

Fügen Sie in die Datei build.gradle.kts Folgendes hinzu:

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

Schritt 2: Konfigurationsdatei erstellen

\n

Erstellen Sie die Datei src/main/resources/logback.xml:

\n
<configuration>\n    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">\n        <encoder>\n            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\n        </encoder>\n    </appender>\n\n    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">\n        <file>logs/app.log</file>\n        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">\n            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>\n            <maxHistory>30</maxHistory>\n        </rollingPolicy>\n        <encoder>\n            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\n        </encoder>\n    </appender>\n\n    <root level="INFO">\n        <appender-ref ref="CONSOLE"/>\n        <appender-ref ref="FILE"/>\n    </root>\n</configuration>
\n

Diese Konfiguration gibt Logs auf der Konsole und in einer Datei mit täglicher Rotation aus (Logs werden 30 Tage lang aufbewahrt).

\n\n

Schritt 3: Verwendung im Code

\n

Verwenden wir die Bibliothek kotlin-logging:

\n
import mu.KotlinLogging\n\nprivate val logger = KotlinLogging.logger {}\n\nfun main() {\n    logger.info("Anwendung gestartet")\n    logger.debug { "Wert der Variable x = $x" }\n    try {\n        // irgendein Code\n    } catch (e: Exception) {\n        logger.error(e) { "Fehler bei der Ausführung der Operation" }\n    }\n}
\n\n

Logging-Stufen: Wann was verwenden

\n

Die richtige Wahl der Stufe ist die Grundlage für lesbare Logs. In Logback sind die folgenden Stufen verfügbar

Blogs

Buchempfehlungen