¡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
