Ir al contenido

Logs estructurados y no estructurados en .NET: conceptos básicos

Alessandro Mengoli
Series: Observabilidad en .NET · 2

Las aplicaciones llevan mucho tiempo produciendo logs, pero un mensaje solo es útil si nos ayuda a entender qué pasó. Las herramientas actuales pueden buscar más que texto: también filtran por propiedades asociadas a cada evento. Para aprovecharlas, conviene pasar de los mensajes no estructurados a los logs estructurados.

¿Qué son los logs no estructurados?

Piensa en el log de una aplicación como en un diario. En un diario podrías escribir «Marco comió a las 13:00». En código, algo parecido sería:

_logger.LogInformation($"El usuario {userId} inició sesión a las {DateTime.Now}");
_logger.LogError($"Error al procesar el pedido {orderId}: {errorMessage}");

El resultado es texto sin estructura:

[2024-11-19 15:30:45 INF] El usuario 12345 inició sesión a las 19/11/2024 15:30:45
[2024-11-19 15:31:02 ERR] Error al procesar el pedido ORD-789: Validación fallida

Para una persona, estos mensajes son fáciles de leer. Para una máquina, cada línea es solo una cadena de texto. ¿Qué parte corresponde al identificador del pedido? ¿Cómo filtramos por ese identificador sin analizar el texto? Un diario puede ser claro para quien lo escribe y, aun así, difícil de consultar de manera sistemática.

El paso a los logs estructurados

Los logs estructurados mantienen la legibilidad del mensaje, pero asignan nombres y tipos independientes a sus valores. En .NET, se usa una plantilla de mensaje en lugar de interpolar la cadena:

_logger.LogInformation("El usuario {UserId} inició sesión a las {LoginTime}",
    userId,
    DateTime.Now);

Un proveedor de logging puede guardar el evento en JSON:

{
  "Timestamp": "2024-11-19T15:30:45.123Z",
  "Level": "Information",
  "Message": "El usuario 12345 inició sesión a las 19/11/2024 15:30:45",
  "Properties": {
    "UserId": "12345",
    "LoginTime": "2024-11-19T15:30:45.123Z"
  }
}

La diferencia es importante: UserId y LoginTime son propiedades, no fragmentos escondidos en el mensaje. Se pueden buscar, filtrar y analizar directamente.

Ventajas de los logs estructurados

  1. Búsqueda: encontrar todos los eventos de un usuario o pedido.
  2. Agregación: calcular estadísticas a partir de las propiedades.
  3. Filtrado: acotar resultados por cualquier propiedad registrada.
  4. Análisis: ejecutar consultas más completas sobre los eventos.
  5. Observabilidad: relacionar mejor los logs con otras señales de telemetría.

Conclusión

Pasar a logs estructurados es como sustituir un diario de papel por un registro digital que se puede consultar. Conservamos la explicación legible para las personas y ganamos la capacidad de analizar sus datos.

Este artículo se ha escrito o traducido con ayuda de inteligencia artificial.