Registro en C# (.NET): Resumen de las mejores soluciones
El registro no es solo la grabación de errores. Es una herramienta fundamental para monitorear el estado de la aplicación, auditar las acciones de los usuarios y depurar en un entorno de producción. En el ecosistema de C# (.NET), existen varias bibliotecas maduras, cada una de las cuales resuelve la tarea de registro a su manera. En este artículo, analizaremos las soluciones más populares: NLog, Serilog, log4net y el integrado Microsoft.Extensions.Logging.
1. Microsoft.Extensions.Logging (ILoger integrado)
A partir de .NET Core, Microsoft proporciona una abstracción para el registro: la interfaz ILogger<T> y la fábrica ILoggerFactory. Esta no es una biblioteca completa, sino un contrato al que se puede conectar cualquier implementación (NLog, Serilog, etc.).
Ventajas: integrado en ASP.NET Core, no requiere dependencias adicionales para el registro básico, se puede reemplazar fácilmente por otra biblioteca.
Desventajas: funcionalidad limitada "de fábrica" (solo niveles: Trace, Debug, Information, Warning, Error, Critical). No hay datos estructurados.
Ejemplo de uso:
using Microsoft.Extensions.Logging;
public class OrderService{ private readonly ILogger<OrderService> _logger;
public OrderService(ILogger<OrderService> logger) { _logger = logger; }
public void ProcessOrder(int orderId) { _logger.LogInformation("Procesando pedido {OrderId}", orderId); try { // Lógica de procesamiento } catch (Exception ex) { _logger.LogError(ex, "Error al procesar el pedido {OrderId}", orderId); } }}2. Serilog (Registro estructurado)
Serilog es el líder en flexibilidad y popularidad. Su característica principal es el registro estructurado. En lugar de mensajes de cadena, pasa objetos que se serializan automáticamente en JSON u otro formato. Esto permite analizar fácilmente los registros a través de Elasticsearch, Seq o Grafana.
Ventajas: excelente integración con .NET, potentes "enrichers" (enriquecimiento con contexto), soporte para sinks (salida a archivo, BD, consola, servicios en la nube).
Desventajas: para aplicaciones simples puede ser excesivo, requiere configuración.
Ejemplo de configuración y uso:
using Serilog;
// Configuración en Program.csLog.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/myapp-.log", rollingInterval: RollingInterval.Day) .WriteTo.Seq("http://localhost:5341") .Enrich.WithProperty("Application", "MyApp") .CreateLogger();
try{ Log.Information("Iniciando la aplicación"); var user = new { Id = 1, Name = "Iván" }; Log.Information("El usuario {User} ha iniciado sesión", user);}catch (Exception ex){ Log.Fatal(ex, "Error crítico");}finally{ Log.CloseAndFlush();}3. NLog (Rendimiento y flexibilidad)
NLog es otro potente framework con una rica historia. Es conocido por su rendimiento y soporte para reglas de enrutamiento complejas. La configuración se puede definir tanto en un archivo XML (nlog.config) como mediante programación.
Ventajas: muy rápido, soporta registro asíncrono, puede enviar registros por correo electrónico, a bases de datos, al EventLog. Excelente soporte para .NET Framework y .NET Core.
Desventajas: la sintaxis de configuración XML puede parecer engorrosa.
Ejemplo de configuración de nlog.config:
<?xml version="1.0" encoding="utf-8" ?><nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets>