@logbrew/sdk 0.1.40, @logbrew/node 0.1.24 y @logbrew/express 0.1.10.
Cada bloque de salida muestra su salida real.
Elige Winston o Pino
Las dos bibliotecas escriben logs JSON estructurados. Quédate con la biblioteca que ya usa tu app. La configuración de LogBrew es distinta para cada una.Prepara un proyecto de LogBrew
1
Crea una clave de proyecto
Inicia sesión con la CLI. Crea un proyecto y guarda su
clave de ingesta en un archivo al que solo accede su propietario.La CLI no muestra la clave. En producción, usa el gestor de secretos de tu
plataforma.
2
Instala los paquetes
Los paquetes requieren Node.js 18.19 o posterior. Instala Winston, Pino o
los dos.
3
Define la clave y la identidad del despliegue
createLogBrewNodeClient() lee la clave de LOGBREW_SERVER_API_KEY. El
nombre del servicio es el name de package.json. Define
LOGBREW_SERVICE_NAME para usar otro nombre. Los ejemplos usan módulos
ES, así que define "type": "module" en package.json.Niveles de log en Node.js
Cada biblioteca tiene sus propios nombres y números de nivel. LogBrew guarda 4 niveles y conserva el nivel original en los metadatos.
En Winston, un número más bajo es más grave. En Pino, un número más alto es más
grave. Usa
info en producción y debug solo para un diagnóstico breve.
Logger de Winston
Guarda este archivo comowinston-app.js. El primer formato descarta los
registros por debajo del nivel del logger antes de que un transport los
reciba. El transport de LogBrew recibe todos los registros que escribe el
logger, así que necesita este filtro.
node winston-app.js. La consola recibe 1 línea JSON por cada registro
de nivel info o superior. Aquí la traza de pila aparece acortada.
context.*.
El transport envía el nombre y el mensaje del error, pero no la traza de pila.
Fija
includeErrorStack: true en createLogBrewWinstonTransport() para enviar
la traza de pila. Cada mensaje también se convierte en un paso anterior de la
siguiente incidencia. Fija breadcrumbs: false para evitarlo.
Logger de Pino
Guarda este archivo comopino-app.js. Llama a
installLogBrewPinoInstrumentation() una vez, antes del primer log. La función
lee cada registro de Pino terminado. Pino sigue escribiendo en su propio
destino.
node pino-app.js. Aquí el nombre del host y la traza de pila
aparecen acortados.
debug antes de que
LogBrew lo vea.
El campo
token no llega a LogBrew. LogBrew descarta los campos de
credenciales, cookies, cuerpo, parámetros de consulta, URL y traza de pila.
Además, mantiene tus rutas redact de Pino como segundo control. pid,
hostname y time son valores predeterminados de Pino, así que LogBrew no los
copia.
La captura automática requiere Pino 9.11 o posterior en la línea 9.x, o Pino
10.1 o posterior. Para versiones anteriores de Pino, usa
createLogBrewPinoDestination() de @logbrew/sdk como destino de Pino.
Para leer la salida de Pino en desarrollo, envíala a pino-pretty.
Logger de Express
logbrewMiddleware() crea 1 span de solicitud por cada solicitud.
logbrewErrorHandler() informa de los errores como incidencias. Un log de Pino
dentro de una solicitud recibe el ID de traza y el ID de span de esa solicitud.
Guarda este archivo como express-app.js.
El nombre del span usa la plantilla de la ruta, no la ruta concreta. El log
listening on 3000 no tiene traza, porque está fuera de una solicitud.
Deja que el middleware cree sus propios clientes de solicitud. No pases el
client de todo el proceso a logbrewMiddleware() ni a
logbrewErrorHandler(). El middleware cierra su cliente de solicitud después
de cada respuesta.
Añade la traza a los logs de Winston
Con Winston, pasa la traza activa al transport.logbrewTransport a la lista transports del logger. Así, un log de
Winston dentro de una solicitud de Express tiene el ID de traza y el ID de span
de la solicitud.
Vuelve a leer los logs
<trace_id> de una
traza o de una incidencia. Para leer desde CI o desde un agente de
programación, usa una clave de lectura del proyecto. Consulta
Verifica tu configuración.
Apaga sin perder logs
El cliente envía los eventos en cola 1 segundo después del primer evento o al llegar a 50 eventos. Cuando el event loop queda vacío, el cliente envía los eventos pendientes durante 2 segundos como máximo.process.exit() y las
señales del sistema se saltan ese paso. Llama a await client.shutdown() antes
de salir, como hace el handler de SIGTERM del ejemplo de Express.
Soluciona problemas
Para elegir los campos de log, consulta
Logging estructurado. Para otros frameworks,
consulta Integración del SDK.
