Vai al contenuto

Logging

L'API di logging di Vapor è costruita utilizzando SwiftLog. Ciò significa che Vapor è compatibile con tutte le implementazioni backend supportate da SwiftLog.

Logger

Le istanze di Logger sono usate per produrre messaggi di log. Vapor fornisce alcuni modi semplici per accedere a un logger.

Request

Ogni Request in arrivo ha un logger univoco che dovresti usare per qualsiasi log specifico a quella richiesta.

app.get("hello") { req -> String in
    req.logger.info("Hello, logs!")
    return "Hello, world!"
}

Il logger della richiesta include un UUID univoco che identifica la richiesta in arrivo per rendere più facile il tracciamento dei log.

[ INFO ] Hello, logs! [request-id: C637065A-8CB0-4502-91DC-9B8615C5D315] (App/routes.swift:10)

Informazione

I metadati del logger verranno mostrati solo a livello di log debug o inferiore.

Application

Per i messaggi di log durante l'avvio e la configurazione dell'app, usa il logger di Application.

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

Logger Personalizzato

In situazioni dove non hai accesso ad Application o Request, puoi inizializzare un nuovo Logger.

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

Sebbene i logger personalizzati producano ancora output nel tuo backend di logging configurato, non avranno metadati importanti allegati come l'UUID della richiesta. Usa i logger specifici per la richiesta o per l'applicazione ovunque possibile.

Livello

SwiftLog supporta diversi livelli di logging.

Nome Descrizione
trace Appropriato per messaggi che contengono informazioni normalmente utili solo quando si traccia l'esecuzione di un programma.
debug Appropriato per messaggi che contengono informazioni normalmente utili solo quando si esegue il debug di un programma.
info Appropriato per messaggi informativi.
notice Appropriato per condizioni che non sono errori, ma che potrebbero richiedere una gestione speciale.
warning Appropriato per messaggi che non sono errori, ma più gravi di notice.
error Appropriato per condizioni di errore.
critical Appropriato per condizioni di errore critico che di solito richiedono attenzione immediata.

Quando viene registrato un messaggio critical, il backend di logging è libero di eseguire operazioni più pesanti per acquisire lo stato del sistema (come acquisire stack trace) per facilitare il debug.

Come impostazione predefinita, Vapor utilizzerà il livello di logging info. Quando eseguito con l'ambiente production, verrà usato notice per migliorare le prestazioni.

Cambiare il Livello di Log

Indipendentemente dalla modalità dell'ambiente, puoi sovrascrivere il livello di logging per aumentare o diminuire la quantità di log prodotti.

Il primo metodo è passare il flag opzionale --log quando si avvia l'applicazione.

swift run App serve --log debug

Il secondo metodo è impostare la variabile d'ambiente LOG_LEVEL.

export LOG_LEVEL=debug
swift run App serve

Entrambe queste operazioni possono essere eseguite in Xcode modificando lo schema App.

Configurazione

SwiftLog è configurato attraverso il bootstrap di LoggingSystem una volta per processo. I progetti Vapor tipicamente lo fanno in entrypoint.swift.

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

bootstrap(from:) è un metodo helper fornito da Vapor che configurerà il log handler predefinito in base agli argomenti della riga di comando e alle variabili d'ambiente. Il log handler predefinito supporta la produzione di messaggi nel terminale con supporto al colore ANSI.

Handler Personalizzato

Puoi sovrascrivere il log handler predefinito di Vapor e registrare il tuo.

import Logging

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

Tutti i backend supportati da SwiftLog funzioneranno con Vapor. Tuttavia, la modifica del livello di log con argomenti della riga di comando e variabili d'ambiente è compatibile solo con il log handler predefinito di Vapor.