Registro para C# (.NET): revisión de las mejores soluciones
El registro es un aspecto crítico en el desarrollo de cualquier aplicación seria en C#. Permite monitorear el estado del sistema, diagnosticar errores, analizar el comportamiento de los usuarios y recopilar métricas de rendimiento. En el ecosistema .NET existen varias bibliotecas maduras para el registro, cada una con sus fortalezas. En este artículo revisaremos las tres soluciones más populares: Serilog, NLog y log4net, así como la abstracción estándar Microsoft.Extensions.Logging.
¿Por qué se necesita una biblioteca separada para el registro?
La clase incorporada System.Diagnostics.Debug o Console.WriteLine solo es adecuada para los escenarios más simples. Las bibliotecas profesionales proporcionan:
- Niveles de registro (Trace, Debug, Information, Warning, Error, Fatal) — filtrado flexible de mensajes.
- Registro estructurado — almacenamiento de datos en formato JSON con posibilidad de análisis posterior.
- Múltiples "receptores" (sinks/targets) — escritura en archivo, base de datos, consola, stack ELK, Sentry, Application Insights, etc.
- Configuración dinámica — cambio del nivel de registro sin reiniciar la aplicación.
- Rendimiento — escritura asíncrona, almacenamiento en búfer, impacto mínimo en la velocidad de ejecución.
1. Serilog — el estándar moderno
Serilog es la biblioteca más popular para .NET, que apostó por el registro estructurado. En lugar de formatear cadenas con string.Format, se utilizan marcadores de posición con nombre:
using Serilog;
Log.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/app-.log", rollingInterval: RollingInterval.Day) .WriteTo.ApplicationInsights(TelemetryConfiguration.Active, TelemetryConverter.Traces) .CreateLogger();
// Ejemplo de registro estructuradoLog.Information("Usuario {UserId} realizó el pedido {OrderId} por un total de {Total:C}", userId, orderId, total);Serilog es ideal para microservicios, aplicaciones en la nube y proyectos donde es importante un análisis profundo de registros a través de Kibana o Grafana.
2. NLog — flexibilidad y rendimiento
NLog es una biblioteca potente con amplias capacidades de enrutamiento. Soporta tanto configuración XML como configuración programática. Una característica de NLog es su mecanismo integrado de escritura asíncrona y soporte para reglas condicionales.
using NLog;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public void ProcessOrder(Order order){ Logger.Info("Inicio del procesamiento del pedido {OrderId}", order.Id); try { // lógica de negocio Logger.Debug("Pedido {OrderId} procesado exitosamente", order.Id); } catch (Exception ex) { Logger.Error(ex, "Error al procesar el pedido {OrderId}", order.Id); throw; }}NLog se elige a menudo para aplicaciones de escritorio (WPF, WinForms) y proyectos heredados debido a la facilidad de migración desde log4net.
3. log4net — el veterano probado
log4net es un puerto de la popular biblioteca Java log4j. Es la solución más "antigua" que aún se utiliza activamente en proyectos corporativos. Su principal ventaja es la enorme cantidad de adaptadores y "appenders" escritos durante décadas.
// Configuración a través de XML (log4net.config)<log4net> <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> <file value="logs/app.log" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd" />