Agregando Logging a API
Clase 14 de 22 • Curso de APIs con .NET
Contenido del curso
Clase 14 de 22 • Curso de APIs con .NET
Contenido del curso
Emerson Cedeño
Emanuel Alejandro López
Juan David Balanta Rentería
Erick Edgardo Marroquin Escobar
NELSON FERNANDO PINZON ARANZAZU
Platzi Team
Emerson Cedeño
Xavier Medina Veintimilla
Marcos Avila Rodriguez
Marcos Lanuza
Fernando Vergel
Juan Felipe Barahona Gonzalez
Alan Fernandez
Dario Sarmiento Rojas
Miguel Teheran
Miguel Angel Reyes Moreno
David Dávila
Bryan Alejandro Zelada Lemus
Joan Alexander Valerio Rodríguez
Evelio Vega
Miguel Teheran
ROMMEL DUAREZ SAENZ
Mauricio Daniel Campos
Miguel Teheran
Francisco Javier Saavedra Alcala
Juan Diego Sánchez Rodríguez
Mathías Cabrera
Luis Antonio Preza Padilla
JUAN DAVID MARTINEZ GONZALEZ
Santiago Montero
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
GAAAAAAA
Excelente.
.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:
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" } },
cómo el sistema sabe en qué entorno me encuentro, así como en otros stacks puede uno crear más de estos archivos de configuración por entorno (por ejemplo: appsettings.Staging.json), y de ser así, dónde y qué ajustes tendrían que hacerse para que el sistema sepa qué archivo leer?
¡Hola! :D
¿Cuál es el problema que tienes?, ¿en qué te puedo ayudar? Puedes adjuntar imágenes arrastrándolas a esta ventana de comentario.
Nunca pares de aprender 💚
Por las variables de entorno, en las propiedades de la solución (si mal no recuerdo) se encuentra esta variable, entonces, si deseas crear una configuración en particular, tendrías que partir de ahí.
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()
Gracias, estaba frenado en un error de syntax y esto me ayudo!
Quizás a alguien le sirva...
En la clase anterior, dejé la inyección de dependencias de la manera genérica:
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
Genio, muchas gracias !
Cual es la diferencia entre appsettings.Development.json y appsettings.json???
El appsettings.json son las configuraciones generales el appsettings.Development.json sobreescribe esos datos y agrega mas para el ambiente de develop. La forma de especificar el ambiente en .NET es usando una variable de entorno https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-7.0
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()); } }
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
List es un tipo de dato dentro del lenguaje de programación C#, y acepta dentro de los <> un tipo, para especificar valga la redundancia que tipo de datos son los elementos dentro de la lista.
Ej. List<Product>
Implementación usando LogInformation() en GreetingsController :)
una duda, mi app no levanta por el puerto https, durante todo el curso he tenido q usar http, q puedo hacer ?
A varios les ha pasado que raro, puede revisar el tema de los certificados depronto no los tienes instalados: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-dev-certs
y cuando se cambiaría el appsettings.json.?
buenas! consulta, estoy implementando el consumo de una API pero tengo inconveniente para usar el certificado en las peticiones Get y Post
trata de instalar los certificados nuevamente
https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide
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 ?
Comparto mi Logging en el Controlador de HelloWorld
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
 { _logger = logger; helloWordlService = helloWorld; } public IActionResult Get() { _logger.LogDebug("Retorno del Request hello world"); return Ok(helloWordlService.GetHelloWorld()); } >