Resumen

Domina la inyección de dependencias y el logging en .NET con una implementación simple y efectiva. Aprenderás a configurar el servicio, inyectar el ILogger en tu controller o método, y ajustar los niveles de logging en appsettings.json para ver exactamente lo que necesitas en consola.

¿Qué resuelven la inyección de dependencias y el logging en .NET?

La inyección de dependencias te entrega objetos ya configurados sin crearlos manualmente. Evita usar new dentro de las clases para no acoplar implementaciones ni romper pruebas. Con logging, registras información clave de ejecución y errores según el nivel configurado.

  • ILogger inyectado llega listo para usar en el controller.
  • No instancies manualmente: evita new Logger porque limita reemplazos y mocks en pruebas.
  • Plantilla de .NET ya incluye el servicio de logging y puedes inyectarlo donde lo necesites.

¿Cómo se configura el servicio de logging?

  • Agrega la configuración de servicios de logging en el archivo de inicio del proyecto (Program): ya viene incluida en la plantilla.
  • Con esa configuración, puedes inyectar el servicio en controladores o clases de la Web API.

¿Cómo inyectar ILogger desde el constructor o como parámetro?

  • Constructor: recibes el ILogger y lo guardas en una variable local.
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger; // inyección por constructor.
    }

    [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("Returning list of weather forecasts");
        return Ok();
    }
}
  • Parámetro del método: inyectas con el atributo FromServices sin usar el constructor.
[HttpGet]
public IActionResult Get([FromServices] ILogger<WeatherForecastController> logger)
{
    logger.LogInformation("Returning list of weather forecasts");
    return Ok();
}

¿Por qué evitar new Logger y preferir la inyección?

  • Crear instancias con new obliga a repetir código y acopla la implementación.
  • No podrás reemplazar por un mock en pruebas unitarias.
  • La inyección entrega objetos configurados y reutilizables en todo el proyecto.

¿Cómo controlar los niveles de logging en appsettings?

El logging se controla desde appsettings.json (y puedes especificarlo por ambiente, por ejemplo, Development). Según el nivel, se mostrarán más o menos mensajes en consola.

{
  "Logging": {
    "LogLevel": {
      "Default": "Error"
    }
  }
}

¿Qué muestra cada nivel de logging?

  • critical: muestra solo errores críticos.
  • error: muestra errores.
  • information: muestra información, errores y critical.
  • trace: muestra todo: trace, warning, information, error, debug y critical.

¿Cómo afecta la configuración al resultado en consola?

  • Si configuras error, un LogInformation(...) no se mostrará.
  • Cambia a LogError(...) y sí aparecerá porque coincide con el nivel configurado.
  • El middleware puede seguir registrando según su propia configuración.

¿Cómo comprobar el logging desde un archivo HTTP?

  • Ejecuta el proyecto y lanza un request desde tu archivo .http.
  • Con LogInformation("Returning list of weather forecasts"), verás el mensaje cuando el nivel lo permita.
  • Cambia el nivel y repite la prueba para validar el comportamiento.

¿Qué reto práctico ayuda a dominar estos conceptos?

Ponte manos a la obra para fijar el aprendizaje con APIs con .NET.

  • Agrega logging en todos los endpoints de WeatherForecast.
  • Crea tu propia clase de servicio, por ejemplo, LoggingAPI.
  • Configura la inyección en Program con el servicio de logging.
  • Recibe la dependencia en el controller de WeatherForecast.
  • Verifica resultados cambiando los niveles en appsettings.json.

¿Te quedó alguna duda o quieres compartir tu implementación? Escribe tus preguntas y comenta tus resultados.

      Inyección de dependencias en .NET: ILogger