Registro en C#: mejores prácticas para desarrolladores principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué el registro es la base de una aplicación estable



Cualquier desarrollador, especialmente los principiantes, tarde o temprano se enfrenta a una situación en la que la aplicación falla y es imposible entender la causa. Sin registros, estás ciego. El registro no es solo escribir mensajes en un archivo, sino una poderosa herramienta de monitoreo, depuración y análisis del comportamiento del programa. En el ecosistema de C# (.NET) existen varios frameworks maduros que permiten configurar de forma flexible la salida de registros. En este artículo, analizaremos las mejores prácticas de registro para principiantes: desde la elección de una biblioteca hasta la salida de datos estructurados.



1. Elección de la biblioteca de registro: NLog vs Serilog



Para aplicaciones .NET, existen dos actores principales: NLog y Serilog. Ambos son gratuitos, se mantienen activamente y tienen miles de integraciones. ¿Cuál elegir?



NLog

  • Facilidad de configuración a través de XML o código.
  • Excelente rendimiento bajo cargas elevadas.
  • Soporte integrado para rotación de archivos, envío de correos electrónicos, escritura en base de datos.
  • Adecuado para proyectos donde se necesita un inicio rápido sin dependencias innecesarias.


Serilog

  • Enfoque en el registro estructurado (structured logging).
  • Los registros no se almacenan como cadenas, sino como objetos con campos, lo que facilita la búsqueda y el análisis.
  • Ideal para microservicios y sistemas donde los registros se recopilan en Elasticsearch o Grafana.
  • La sintaxis con marcadores de posición {Property} hace que el código sea más legible.


Consejo para principiantes: Comienza con Serilog si planeas trabajar con herramientas de monitoreo modernas. Si el proyecto es pequeño y local, NLog será suficiente.



// Ejemplo de configuración de Serilog en Program.cs (.NET 6+)using Serilog;

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

var builder = WebApplication.CreateBuilder(args);builder.Host.UseSerilog(); // Conectamos Serilog al host


2. Niveles de registro: cuándo y qué escribir



Uno de los errores más comunes de los principiantes es escribir todo indiscriminadamente en el nivel Info o Error. Esto satura los registros y los vuelve inútiles. En .NET se aceptan los siguientes niveles (en orden creciente de importancia):



  • Trace — detalles mínimos: entrada/salida de métodos, iteraciones de bucles. Se usa solo en depuración profunda.
  • Debug — información de depuración para el desarrollador: valores de variables, estado de objetos.
  • Information — eventos clave del funcionamiento de la aplicación: inicio, parada, procesamiento exitoso de una solicitud.
  • Warning — problemas potenciales que no interrumpen el trabajo: solicitud lenta, versión obsoleta de API.
  • Error — excepciones y fallos que requieren intervención: error de BD, tiempo de espera agotado.
  • Fatal — errores críticos después de los cuales la aplicación no puede continuar funcionando.


// Ejemplo de uso de diferentes nivelesILogger<MyService> _logger;

public async Task ProcessOrderAsync(int orderId){ _logger.LogInformation("Inicio del procesamiento del pedido {OrderId}", orderId);

try { var result = await _repository.GetOrderAsync(orderId); if (result == null) { _logger.LogWarning("Pedido {OrderId} no encontrado", orderId); return; } // ... lógica } catch (Exception ex) { _logger.LogError(ex, "Error al procesar el pedido {OrderId}", orderId); throw; // Relanzamos si no se puede recuperar }}


Mejor práctica

Blogs

Book Recommendations