Zum Inhalt

Protokollierung

Mit der Protokollierung können Statusinformationen und Systemereignisse in Vapor festgehalten und ausgegeben werden. Die Protokollierung in Vapor baut auf Apple's SwiftLog auf.

Logger

Die Logger Instanz gibt die Protokollinformationen aus. Wir haben verschiedene Möglichkeiten auf die Instanz zuzugreifen.

Zugriff über die Anfrage

Jede eingehende Anfrage besitzt eine unabhängige Logger Instanz, die für die jeweilige Anfrage verwendet werden kann.

app.get("hello") { req -> String in
    req.logger.info("Hello, logs!")
    return "Hello, world!"
}
[ INFO ] Hello, logs! [request-id: C637065A-8CB0-4502-91DC-9B8615C5D315] (App/routes.swift:10)

Zugriff über die Anwendung

Für Informationen während des Startens oder der Einrichtung können wir die Instanz Application nutzen.

app.logger.info("Setting up migrations...")
app.migrations.use(...)

Benutzerdefinierte Protokollierung

Falls wir nicht auf Beides zurückgreifen können, können wir eine eigene Instanz erstellen.

let logger = Logger(label: "dev.logger.my")
logger.info(...)

Protokollstufen

Protokollstufen steuern den Informationsumfang. Vapor protokolliert standardmäßig auf der Stufe info. Mit Wechseln in die Produktionsumgebung verwendet Vapor zur Verbesserung der Performance die Stufe notice. Es gibt noch weitere Protokollstufen:

Stufen Beschreibung
trace Geeignet für Informationen, die zur Ablaufverfolgung nüztlich sein können.
debug Geeignet für Informationen, die fürs Debuggen nützlich sein können.
info Geeignet für allgemeinen Informationen.
notice Geeignet für unerwartete Ereignisse, die jedoch zu keinem Anwendungsausfall führen.
warning Geeignet für unerwartete Ereignisse, die allerdings schwerwiegender sind als in notice.
error Geeigent für Fehlerzustände.
critical Geeignet für kritische Fehlerzustände, die ein sofortiges Handeln erfordern.

Festlegen einer Protokollstufe

Unhabhängig von der Umgebung können wir Protokollstufen mit Hilfe des Parameters --log oder der Umgebungsvariable LOG_LEVEL festlegen.

swift run App serve --log debug

oder

export LOG_LEVEL=debug
swift run App serve

Beides kann über das Schema App in Xcode eingestellt werden. Im Abschnitt Xcode erklären wir dir, wie du ein Schema bearbeitest.

Einrichtung

SwiftLog wird von Vapor mit Hilfe der Methode bootstrap(:) basierend auf dem Kommandozeilenargument oder der Umgebungsvariable einmal pro Prozess eingerichtet.

import Vapor

var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)

Protokollierungsanbieter

Der Standardanbieter kann, wenn gewünscht, überschrieben werden. Dank der Verwendung von SwiftLog kann jeder kompatible Protokollierungsanbieter verwendet werden. Allerdings ist das Ändern der Protokollierstufe per Kommandozeilenargument oder Umgebungsvariable nur mit dem Standardanbieter möglich.

import Logging

LoggingSystem.bootstrap { label in
    StreamLogHandler.standardOutput(label: label)
}