El registro de eventos (logging) es una de las herramientas más importantes para desarrollar aplicaciones empresariales en .NET. Un buen sistema de logs permite detectar errores rápidamente, analizar el comportamiento de la aplicación, monitorear el rendimiento y facilitar la resolución de problemas en producción. Aunque ASP.NET Core incluye un sistema de logging integrado, Serilog destaca por su facilidad de configuración, su capacidad de generar logs estructurados y la posibilidad de enviarlos a múltiples destinos simultáneamente.
¿Qué es Serilog?
Serilog es una biblioteca de logging para .NET diseñada para producir logs estructurados, lo que significa que la información se almacena en un formato fácil de consultar por herramientas como Elasticsearch, Seq, Grafana Loki o Azure Monitor.
En lugar de registrar únicamente mensajes de texto, Serilog guarda datos adicionales como propiedades, identificadores, tiempos de ejecución y contexto del usuario.
Por ejemplo, en lugar de registrar:
Usuario inició sesión.
Puede almacenar:
Usuario inició sesión
{
UserId: 25,
Email: "usuario@empresa.com",
Fecha: "2026-07-13T10:30:00"
}
Esto facilita enormemente la búsqueda y análisis de eventos.
Instalación
Los paquetes principales son:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
También existen sinks para SQL Server, Elasticsearch, Seq, Azure, AWS, Grafana Loki y muchos otros.
Configuración básica
En Program.cs se configura antes de crear la aplicación:
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("Logs/log-.txt",
rollingInterval: RollingInterval.Day)
.CreateLogger();
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog();
Con esta configuración todos los eventos se enviarán tanto a la consola como a archivos diarios.
Registrar información
En cualquier servicio basta con inyectar ILogger<T>.
public class UsuarioService
{
private readonly ILogger<UsuarioService> _logger;
public UsuarioService(ILogger<UsuarioService> logger)
{
_logger = logger;
}
public void CrearUsuario(string nombre)
{
_logger.LogInformation(
"Creando usuario {Nombre}", nombre);
}
}
El valor de Nombre quedará registrado como una propiedad estructurada.
Niveles de logging
Serilog soporta diferentes niveles:
- Verbose: información extremadamente detallada.
- Debug: útil durante el desarrollo.
- Information: eventos normales del sistema.
- Warning: situaciones inesperadas.
- Error: errores recuperables.
- Fatal: fallos críticos.
En producción normalmente se utiliza el nivel Information, mientras que Debug suele reservarse para entornos de desarrollo.
Agregar contexto
Una de las mayores ventajas de Serilog es agregar información contextual automáticamente.
LogContext.PushProperty("UsuarioId", usuario.Id);
LogContext.PushProperty("Empresa", empresa.Nombre);
A partir de ese momento todos los logs incluirán esos datos sin necesidad de escribirlos manualmente.
Manejo de excepciones
Registrar excepciones es muy sencillo:
try
{
// código
}
catch(Exception ex)
{
_logger.LogError(ex,
"Error al procesar la solicitud");
}
Serilog almacenará el mensaje, el stack trace y toda la información de la excepción.
Configuración mediante appsettings.json
También puede configurarse desde el archivo de configuración:
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{ "Name": "Console" },
{ "Name": "File",
"Args": {
"path": "Logs/log-.txt",
"rollingInterval": "Day"
}
}
]
}
Esto permite modificar el comportamiento sin recompilar la aplicación.
Buenas prácticas
Para implementar un logging profesional:
- Utiliza logs estructurados en lugar de concatenar cadenas.
- Nunca almacenes contraseñas, tokens o información sensible.
- Define niveles de logging adecuados para cada escenario.
- Agrega contexto como usuario, IP, RequestId y tiempo de ejecución.
- Centraliza los logs utilizando herramientas como Seq, Elasticsearch o Grafana.
- Configura políticas de rotación y eliminación de archivos para evitar consumir demasiado espacio.
Serilog se ha convertido en uno de los estándares para aplicaciones .NET gracias a su flexibilidad, rendimiento y soporte para logs estructurados. Implementarlo correctamente permite mejorar el monitoreo, simplificar la depuración y obtener información valiosa sobre el funcionamiento de una aplicación tanto en desarrollo como en producción. Combinado con herramientas de observabilidad y monitoreo, Serilog ofrece una solución robusta para construir aplicaciones modernas, escalables y fáciles de mantener.

