Introducción: ¿Por qué es importante el registro?
\n\nImagina que tu aplicación en C# está funcionando en producción. De repente, los usuarios reportan un error, pero no puedes entender qué salió mal. Sin registros, eres como un piloto sin instrumentos. El registro es el proceso de registrar información sobre el funcionamiento de la aplicación: errores, advertencias, mensajes de depuración y eventos clave.
\n\nEn este artículo, analizaremos las mejores prácticas de registro para desarrolladores principiantes en C# (.NET). Aprenderás cómo configurar el registro, qué herramientas usar y cómo evitar errores típicos.
\n\n1. Elección de la herramienta de registro en C#
\n\nEn el ecosistema .NET existen varias bibliotecas populares para el registro. Para principiantes, recomendamos tres opciones principales:
\n\n1.1. ILogger integrado (Microsoft.Extensions.Logging)
\n\nA partir de .NET Core, Microsoft proporciona la interfaz integrada ILogger. Es simple de usar y no requiere instalar bibliotecas de terceros.
using Microsoft.Extensions.Logging;\n\npublic class OrderService\n{\n private readonly ILogger<OrderService> _logger;\n\n public OrderService(ILogger<OrderService> logger)\n {\n _logger = logger;\n }\n\n public void ProcessOrder(int orderId)\n {\n _logger.LogInformation("Procesando pedido {OrderId}", orderId);\n // Lógica de procesamiento\n }\n}\n\n1.2. Serilog — flexible y potente
\n\nSerilog es una de las bibliotecas más populares. Admite registro estructurado, lo que facilita el análisis de datos. Instalación a través de NuGet: Install-Package Serilog.AspNetCore
using Serilog;\n\npublic class Program\n{\n public static void Main(string[] args)\n {\n Log.Logger = new LoggerConfiguration()\n .MinimumLevel.Debug()\n .WriteTo.Console()\n .WriteTo.File("logs/app.log", rollingInterval: RollingInterval.Day)\n .CreateLogger();\n\n try\n {\n Log.Information("Aplicación iniciada");\n CreateHostBuilder(args).Build().Run();\n }\n catch (Exception ex)\n {\n Log.Fatal(ex, "La aplicación finalizó con un error");\n }\n finally\n {\n Log.CloseAndFlush();\n }\n }\n}\n\n1.3. NLog — la opción clásica
\n\nNLog es otra biblioteca madura con amplias capacidades de configuración a través de archivos de configuración.
\n\n// Configuración a través de appsettings.json\n{\n "NLog": {\n "targets": {\n "console": {\n "type": "Console",\n "layout": "${longdate}|${level:uppercase=true}|${message}"\n },\n "file": {\n "type": "File",\n "fileName": "logs/app.log",\n "layout": "${longdate}|${level:uppercase=true}|${message}"\n }\n },\n "rules": [\n { "logger": "*", "minLevel": "Info", "writeTo": "console,file" }\n ]\n }\n}\n\n2. Niveles de registro: cuándo usar cada uno
\n\nEl uso correcto de los niveles de registro es la base de una buena práctica. En C# (.NET) se definen los siguientes niveles (del más crítico al menos crítico):
\n\n- \n
- Trace (0) — información de depuración extremadamente detallada. Se usa solo para diagnóstico profundo. \n
- Debug (1) — mensajes de depuración para desarrolladores. Se activa en el entorno de desarrollo, pero se desactiva en producción. \n
- Information (2) — mensajes informativos generales sobre el funcionamiento de la aplicación (inicio, operaciones exitosas). \n
- Warning (3) — advertencias sobre problemas potenciales que no son errores (por ejemplo, tiempo de ejecución excedido). \n
- Error (4) — errores que requieren atención, pero no son fatales para la aplicación. \n
- Critical (5) — errores críticos, después de los cuales la aplicación