Ga naar inhoud

Loggen

Vapor's logging API is gebouwd bovenop SwiftLog. Dit betekent dat Vapor compatibel is met alle backend implementaties van SwiftLog.

Logger

Instanties van Logger worden gebruikt voor het wegschrijven van log berichten. Vapor biedt een paar eenvoudige manieren om toegang te krijgen tot een logger.

Verzoek

Elk inkomende Request heeft een unieke logger die je moet gebruiken voor alle logs die specifiek zijn voor dat verzoek.

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

De verzoeklogger bevat een unieke UUID die het inkomende verzoek identificeert om het traceren van logs te vergemakkelijken.

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

Info

Logger metadata zal alleen getoond worden in debug log level of lager.

Applicatie

Voor log berichten tijdens het opstarten en configureren van de app, gebruik Application's logger.

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

Aangepaste Logger

In situaties waar je geen toegang hebt tot Application of Request, kan je een nieuwe Logger initialiseren.

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

Hoewel aangepaste loggers nog steeds zullen uitvoeren naar je geconfigureerde logboek backend, zullen ze geen belangrijke metadata zoals verzoek UUID bijgevoegd hebben. Gebruik waar mogelijk de verzoek- of applicatiespecifieke loggers.

Niveaus

SwiftLog ondersteunt verschillende logging niveaus.

naam beschrijving
trace Geschikt voor berichten die informatie bevatten die normaal alleen van nut is bij het traceren van de uitvoering van een programma.
debug Geschikt voor berichten die informatie bevatten die normaal alleen nuttig is bij het debuggen van een programma.
info Geschikt voor informatieve berichten.
notice Geschikt voor omstandigheden die geen foutomstandigheden zijn, maar die mogelijk een speciale behandeling vereisen.
warning Geschikt voor berichten die geen foutconditie zijn, maar ernstiger dan een mededeling.
error Geschikt voor foutcondities.
critical Geschikt voor kritieke foutcondities die gewoonlijk onmiddellijke aandacht vereisen.

Wanneer een critical bericht is gelogd, is de logging backend vrij om zwaardere operaties uit te voeren om systeem status vast te leggen (zoals het vastleggen van stack traces) om debugging te vergemakkelijken.

Standaard zal Vapor info niveau logging gebruiken. Wanneer de productie omgeving wordt gebruikt, zal notice worden gebruikt om de performance te verbeteren.

Log Niveau Veranderen

Ongeacht de omgevingsmodus, kunt u het log-niveau aanpassen om de hoeveelheid geproduceerde logs te vergroten of te verkleinen.

De eerste methode is om de optionele --log vlag mee te geven bij het opstarten van je applicatie.

swift run App serve --log debug

De tweede methode is het instellen van de LOG_LEVEL omgevingsvariabele.

export LOG_LEVEL=debug
swift run App serve

Beide kunnen worden gedaan in Xcode door het App schema te bewerken.

Configuratie

SwiftLog wordt geconfigureerd door het LoggingSystem één keer per proces te bootstrappen. Vapor projecten doen dit meestal in entrypoint.swift.

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

bootstrap(from:) is een helper methode van Vapor die de standaard log handler configureert gebaseerd op command-line argumenten en omgevingsvariabelen. De standaard log handler ondersteunt de uitvoer van berichten naar de terminal met ondersteuning voor ANSI kleuren.

Aangepaste Handler

U kunt Vapor's standaard log handler overschrijven en uw eigen log handler registreren.

import Logging

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

Alle ondersteunde backends van SwiftLog werken met Vapor. Echter, het veranderen van het log niveau met command-line argumenten en omgevingsvariabelen is alleen compatibel met Vapor's standaard log handler.