34 Logging in modernen, kontinuierlichen Umgebungen

In modernen, cloud-nativen und kontinuierlichen Umgebungen, wie Kubernetes, ist es üblich, Log-Nachrichten auf die Standardausgabe (stdout) zu schreiben, anstatt sie in Dateien zu speichern oder direkt an Log-Aggregatoren zu senden. Dieser Ansatz passt gut zu den Prinzipien der Zwölf-Faktor-App, insbesondere dem Log-Management, und vereinfacht die Log-Erfassung und -Analyse in verteilten Systemen.

34.1 Vorteile des Schreibens auf Standardausgabe

34.2 Konfiguration in Spring Boot

Spring Boot bietet umfangreiche Unterstützung für Logging und lässt sich leicht so konfigurieren, dass Logs auf die Standardausgabe geschrieben werden. Spring Boot verwendet standardmäßig Logback oder Log4j2 als Logging-Framework, die beide flexibel konfigurierbar sind.

34.2.1 Anpassung der Logging-Konfiguration

Um in einer Spring Boot-Anwendung die Logging-Ausgabe auf die Standardausgabe zu lenken, kann die application.properties oder application.yml Konfigurationsdatei verwendet werden:

logging.level.root=INFO
logging.file.name= # Setzt das Logging-Ziel auf Standardausgabe, indem kein Dateiname angegeben wird

Für eine feinere Kontrolle und um beispielsweise gleichzeitig in Dateien und auf die Standardausgabe zu loggen oder verschiedene Log-Formate zu definieren, kann eine spezifischere Logback-Konfiguration in einer logback-spring.xml Datei vorgenommen werden.

34.2.2 Beispiel für eine Logback-Konfiguration

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

Dieses Beispiel konfiguriert Logback so, dass alle Log-Nachrichten mit dem Level INFO oder höher auf die Standardausgabe mit einem einfachen Format geschrieben werden.

34.3 Zusammenfassung

Das Logging auf die Standardausgabe ist in containerisierten und orchestrierten Umgebungen wie Kubernetes der bevorzugte Ansatz, da es die Log-Verwaltung vereinfacht und für eine nahtlose Integration mit modernen Log-Aggregations- und Monitoring-Tools sorgt. Spring Boot unterstützt diesen Ansatz nativ und bietet flexible Konfigurationsmöglichkeiten, um den spezifischen Anforderungen einer Anwendung gerecht zu werden.