No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Agregando Logging a API

14/22
Recursos

Aportes 15

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

luego de haber hecho el cambio a “Debug” en el appsettings y no ver los correspondientes logs en la consola, me di cuenta que los cambios no los había hecho en el appsettings.Development.json, pilas con en dónde hacen los ajustes trabajando con estos archivos de configuración por entorno

.Net es simplemente asombroso.

Asi implemente logger en la clase HelloWorldController

using Microsoft.AspNetCore.Mvc;

namespace mywebapi.Controllers;

[ApiController]
[Route("api/v1/[controller]")]
public class HelloWorldController : ControllerBase{

    IHelloWorldService helloWorldService;
    private readonly ILogger<HelloWorldController> _logger;
    public HelloWorldController(ILogger<HelloWorldController> logger,IHelloWorldService helloworld)
    {
        _logger = logger;
        helloWorldService = helloworld;
    }

    public IActionResult Get()
    {
        _logger.LogInformation("Saludando el mundo");
        return Ok(helloWorldService.GetHelloWorld()); 
    }
}

Agregando Logging a API


Agregar logging a una API es importante para tener una visibilidad completa sobre la actividad de la API y para poder solucionar problemas más eficientemente.

private readonly ILogger<WeatherForecastController> _logger;

public IActionResult Post([FromBody] WeatherForecast weatherForecast)
	{
		_logger.LogDebug("Log Al Insertar Data");
		ListWeatherForecast.Add(weatherForecast);
		return Ok();
	}

Algunos de los niveles de registro comúnmente utilizados incluyen:

  • Trace: Información detallada y de diagnóstico que se utiliza principalmente durante la depuración y el desarrollo.
  • Debug: Información adicional que se utiliza durante la depuración y el desarrollo.
  • Information: Información general que puede ser útil para comprender lo que está sucediendo en la aplicación.
  • Warning: Información que indica que algo no está funcionando según lo previsto, pero que no impide el funcionamiento de la aplicación.
  • Error: Información que indica que un error ha ocurrido y que puede afectar el funcionamiento de la aplicación.
  • Critical: Información que indica un error grave que puede impedir el funcionamiento de la aplicación.

Para configurar estos niveles de comunicacion, lo hacemos desde el archivo appsettings.json de la siguiente manera:

"Logging": {
    "LogLevel": {
      "Default": "Debug | Information | Warning",
      "Microsoft.AspNetCore": "Warning"
    }
  },

Comparto mi implementación de logging 😊

using Microsoft.AspNetCore.Mvc;

namespace APIProj.Controllers;

[ApiController]
[Route("api/[controller]")]
public class HelloWorldController : ControllerBase
{
    IHelloWorldService helloWorldService;

    private readonly ILogger<HelloWorldController> _logger;

    public HelloWorldController(IHelloWorldService hw, ILogger<HelloWorldController> logger)
    {
        _logger = logger;
        helloWorldService = hw;
    }
    
    public IActionResult Get()
    {
        _logger.LogDebug("Logging from Get(). Hi!");
        return Ok(helloWorldService.GetHelloWorld());
    }

    [Route("get/bye")]
    public IActionResult GetBye()
    {
        _logger.LogDebug("Saying goodbye @ GetBye()");
        return Ok(helloWorldService.GetByeWorld());
    }
}

Ojo que en la interfaz de IHelloWorldService agregué el método GetBye()

Quizás a alguien le sirva... En la clase anterior, dejé la inyección de dependencias de la manera genérica: ```c# builder.Services.AddScoped<IHelloWorldService, HelloWorldService>(); ```Y al intentar al agregar el logger al controlador de HolaMundo me tiraba error sobre que no estaba llamando al constructor como se debía cuando llamaba al endpoint de HolaMundo. La manera de solucionarlo que encontré consiste en usar la manera del factory lambda ```js builder.Services.AddScoped<IHelloWorldService>((_) => new HelloWorldService()); ```Así que si les falla, esta podría ser una de las razones. Saludos

Reto conseguido con HelloWorld:

using Microsoft.AspNetCore.Mvc;

namespace webapi.Controllers;

[ApiController]
[Route("api/[controller]")]
public class HelloWorldController:  ControllerBase
{
    IHelloWorldService helloWorldService;

    private readonly ILogger<HelloWorldController> _logger;

    public HelloWorldController(IHelloWorldService helloWorld, ILogger<HelloWorldController> logger)
    {
        helloWorldService = helloWorld;
        _logger = logger;
    }

    [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("This is the log for hello world!");
        return Ok(helloWorldService.GetHelloWorld());
    }
}

Ví el titulo de la clase y me emocioné pensando que trataria de autenticación 😂 🤡
Cuál es la diferencia entre usar logger y usar Console.Write ?
Por que el atributo List<> del Controlador no es una clase que utiliza la inyección de dependencias tambien? Este concepto es nuevo para mi
Comparto mi Logging en el Controlador de HelloWorld ```js public class HelloWorldController: ControllerBase { IHelloWorldService helloWorldService; public readonly ILogger<HelloWorldController> logger; public HelloWorldController(IHelloWorldService helloWorld, ILogger<HelloWorldController> logger2) { helloWorldService = helloWorld; logger = logger2; } public IActionResult Get() { logger.LogInformation("Retornando 'Hello World'."); return Ok(helloWorldService.GetHelloWorld()); } } ```
Cual es la diferancia de usar el ILogger parametrizado en el controlador y usar ILoggeFactory?

Aporte de Implementación loggin controller HolaMundo

![](

Asi implemente el Loggin en el HelloWorldController, ademas no olvidar si queremos cambiar el logging hacerlo en archivo development

**public class HelloWorldController : ControllerBase
    {
        private readonly ILogger<HelloWorldController>  _logger;
  
        IHelloWordService helloWordlService;
     
        public HelloWorldController(IHelloWordService  helloWorld, ILogger<HelloWorldController> logger)
        {
            _logger = logger;
            helloWordlService = helloWorld;
        }

        public IActionResult Get()
        {
            _logger.LogDebug("Retorno del Request hello world");
         
            return Ok(helloWordlService.GetHelloWorld());
        }
>

comparto el loggin de helloworld

using Microsoft.AspNetCore.Mvc;


namespace NewApi.Controllers
{

    [ApiController]
    [Route("api/[controller]")]
    public class HelloWorldController : ControllerBase
    {

        private readonly IHelloWorldService helloWorldService;

        public  ILogger<HelloWorldController> _logger;
  

        public HelloWorldController(ILogger<HelloWorldController> logger ,IHelloWorldService helloWorld)
        {
            _logger = logger;
            helloWorldService = helloWorld; 

        }


        [HttpGet]
        public IActionResult Get()
        {
            _logger.LogInformation("Saludando al mundo");
            return Ok(helloWorldService.GetHelloWorld());
        }

    }
}