Logging Profesional en .NET con Serilog: Minimalismo Bien Hecho
Aprende a integrar Serilog en tu API .NET de forma limpia y moderna

¡Hola, devs! En este artículo te enseñaré cómo integrar la librería Serilog a tu proyecto con .NET.

Paso a paso

Para este taller, tomaré un proyecto de ejemplo y sobre él trabajaremos.

Con el logger estándar de .NET tu Api luciría así:

Primero tienes que instalar la librería Serilog.Asp.NET en tu proyecto de inicio; en el caso del proyecto que tomaré como ejemplo, es el proyecto de tipo .Net Web Api llamado TennisStore.Api

Luego añade lo siguiente a tu clase Program.cs

var builder = WebApplication.CreateBuilder(args);

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .Enrich.FromLogContext()
    .WriteTo.Console()
    .WriteTo.File("Logs/log-.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

builder.Host.UseSerilog();

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("defaultConnection"));
});

builder.Services.AddScoped<IProductRepository, ProductRepository>();
builder.Services.AddScoped<IProductService, ProductService>();

var app = builder.Build();
app.UseSerilogRequestLogging();

// aquí hay más código que no tiene que ver...
app.UseHttpsRedirection();
app.MapControllers();

app.Run();

Entonces ahora al correr tu aplicación tendrás una consola con logs así:

Nota las diferencias ahora que tienes Serilog configurado: tiene otro formato y colores.

Además tendrás una carpeta Logs con los logs guardados en un archivo de texto:

¿Qué acabamos de hacer?

Te lo explico brevemente:

  • WriteTo.Console() hace que los logs estén visibles en la terminal, esto es ideal para desarrollo y Docker.
  • WriteTo.File() genera logs en archivos; además, hemos seteado un intervalo diario, así que se creará un nuevo archivo cada día, evitando tener uno solo muy grande.
  • UseSerilog() reemplaza el logger por default (Microsoft.Extensions.Logging) por Serilog.
  • UseSerilogRequestLogging() loguea automáticamente cada request HTTP.
  • Ten en cuenta que en toda tu aplicación donde hayas inyectado ILogger<> esta será logueada por Serilog.

Finalmente recuerda hacer tus logs de forma estructurada, así:

_logger.LogInformation("User {UserId} created", user.Id);

Si no sabes cómo hacer logging estructurado visita el artículo anterior aquí

Si este artículo te ha encantado, compártelo! 🎉

Créditos de imagen de portada: Foto de Matthias David en Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *