Logs de texto y logs estructurados
Este log de texto tiene los mismos datos que el log estructurado de abajo.message y order_id. El mensaje es el mismo para todos los
pedidos, así que también puedes contarlo.
Elige un formato de log
Usa JSON, con 1 objeto por línea. Usa los mismos nombres de campo en todos los servicios. Esta tabla muestra los campos base y los nombres equivalentes en el modelo de datos de logs de OpenTelemetry y en LogBrew.
Los números de severidad de OpenTelemetry van de 1 a 24.
INFO empieza en 9,
WARN en 13, ERROR en 17 y FATAL en 21. LogBrew acepta logs OTLP
directamente. Consulta
Envía datos de OpenTelemetry.
Buenas prácticas de logging
Mantén fijo el mensaje
Escribe"payment failed" y pon el ID del pedido en un campo. Un mensaje fijo
te permite agrupar, contar y crear alertas sobre 1 tipo de evento.
Usa 1 nombre para cada campo
Eligeorder_id u orderId una vez y úsalo en todos los servicios. Usa los
nombres de las convenciones semánticas de OpenTelemetry para los campos
comunes, como http.response.status_code.
Elige el nivel según la acción que requiere
error significa que una operación falló. warning significa que el programa
se recuperó. info confirma el trabajo normal. Usa debug solo mientras
buscas un problema.
Escribe la hora en UTC
Usa RFC 3339 con milisegundos y desfase horario, como2026-11-07T14:21:19.773+00:00. Sin UTC y milisegundos, los registros de zonas
horarias distintas, o del mismo segundo, se ordenan mal.
Añade el ID de traza y el ID de span
Con estos ID, puedes leer todos los logs de 1 solicitud en todos los servicios.Define el servicio, el entorno y el release una sola vez
Configúralos al arrancar, no en cada llamada. Si falta el release, no sabes qué despliegue causó un cambio.Registra un error una sola vez, donde lo manejas
Añade el tipo y el mensaje del error. No vuelvas a registrar el mismo error en cada capa.Deja fuera los secretos y los datos personales
No registres contraseñas, tokens, cookies, cuerpos de solicitud ni URL completas con parámetros de consulta. Usa la función de ocultación de tu logger. Consulta Controlar los datos capturados.Usa nombres de campo fijos
No uses valores como nombres de campo, como{"ord_1001": "failed"}. Cada valor
nuevo añade entonces un campo nuevo, y 1 filtro no puede encontrar todos los
pedidos.
Escribe JSON en la salida estándar en producción
Usa un formato legible solo en desarrollo.Logging estructurado en Python
El módulo estándarlogging no tiene un formatter JSON. Este formatter escribe
los campos base y los valores de extra={"fields": {...}}.
LogBrewLoggingHandler.
Envía el mensaje, el nivel y el logger como campos, y los valores primitivos de
extra como metadatos. Consulta Logging en Python.
Logging estructurado en Node.js
Pino escribe por defecto 1 línea JSON por cada registro. Winston escribe JSON conwinston.format.json(). Los dos conservan los campos de la llamada y de
los loggers hijos. Consulta Logging en Node.js para
ver las dos configuraciones y el ID de traza en los logs de Express.
