Logging (Registro)¶
La API de logging (registro) de Vapor está hecha sobre SwiftLog. Esto implica que Vapor es compatible con todas las implementaciones de backend de SwiftLog.
Logger¶
Las instancias de Logger
son usadas para emitir mensajes de registro. Vapor proporciona varias formas sencillas de acceso a un logger (registrador).
Petición (Request)¶
Cada Request
entrante tiene un logger único que debes usar para cualquier registro específico de la propia petición.
app.get("hello") { req -> String in
req.logger.info("Hello, logs!")
return "Hello, world!"
}
El logger de la petición incluye un UUID único que identifica la petición entrante para facilitar el seguimiento de los registros.
[ INFO ] Hello, logs! [request-id: C637065A-8CB0-4502-91DC-9B8615C5D315] (App/routes.swift:10)
Información
Los metadatos del logger solo se mostrarán en el nivel de registro de depuración (debug) o inferiores.
Aplicación¶
Para los mensajes de registro durante el arranque y la configuración de la app, usa el logger de Application
.
app.logger.info("Setting up migrations...")
app.migrations.use(...)
Logger Personalizado¶
En situaciones donde no tengas acceso a Application
o Request
, puedes inicializar un nuevo Logger
.
let logger = Logger(label: "dev.logger.my")
logger.info(...)
Si bien los loggers personalizados emitirán registros al backend de registro que tengas configurado, los registros no contendrán metadatos adicionales relevantes, como el UUID de la petición. Utiliza los loggers específicos de las petición o de la aplicación siempre que puedas.
Nivel¶
SwiftLog soporta una variedad de niveles de registro.
nombre | descripción |
---|---|
trace | Apropiado para mensajes que contengan información usada normalmente cuando se está trazando la ejecución de un programa. |
debug | Apropiado para mensajes que contengan información usada normalmente en procesos de debug de un programa. |
info | Apropiado para mensajes informativos. |
notice | Apropiado para condiciones que no sean errores pero puedan requerir un manejo especial. |
warning | Apropiado para mensajes que no sean condiciones de error pero más severos que un aviso. |
error | Apropiado para condiciones de error. |
critical | Apropiado para el manejo de condiciones críticas de error que requieran atención inmediata. |
Cuando un mensaje critical
es registrado, el backend de registro es libre de realizar operaciones más pesadas para capturar el estado del sistema, como la captura de rastros de pila (stack traces), para facilitar el proceso de depuración (debugging).
Por defecto, Vapor usará en nivel de registro info
. Cuando sea ejecutado en el entorno production
, se usará notice
para mejorar el rendimiento.
Cambiando el nivel de registro¶
Puedes cambiar el nivel de registro independientemente del modo de entorno para aumentar o disminuir la cantidad de registros producidos.
El primer método consiste en pasar la flag opcional --log
cuando arranques tu aplicación.
swift run App serve --log debug
El segundo método consiste en establecer la variable de entorno LOG_LEVEL
.
export LOG_LEVEL=debug
swift run App serve
Ambos métodos pueden realizarse en Xcode editando el App
scheme (esquema de la app).
Configuración¶
SwiftLog se configura arrancando (bootstrapping) el LoggingSystem
una vez por cada proceso. Los projectos de Vapor normalmente hacen esto en entrypoint.swift
.
var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)
bootstrap(from:)
es un método de ayuda (helper method) proporcionado por Vapor que configurará el handler de registros predeterminado en base a argumentos de línea de comandos y variables de entorno. El handler de registros predeterminado soporta la emisión de mensajes a la terminal con soporte de color ANSI.
Handler Personalizado¶
Puedes sobrescribir el handler de registros predeterminado de Vapor y registrar el tuyo propio.
import Logging
LoggingSystem.bootstrap { label in
StreamLogHandler.standardOutput(label: label)
}
Todos los backend soportados por SwiftLog funcionarán con Vapor. Sin embargo, cambiar el nivel de registro con argumentos de línea de comandos y variables de entorno es compatible únicamente con el handler de registros predeterminado de Vapor.