Service Collection
Esta extensión proporciona métodos para configurar e integrar un sistema de logging robusto y flexible en aplicaciones .NET, utilizando Serilog y OpenTelemetry. Facilita la adición de servicios de logging al contenedor de inyección de dependencias y la configuración de Serilog para enriquecer los logs con información útil y exportarlos a sistemas de telemetría.
Dependencias y Requisitos Previos
Section titled “Dependencias y Requisitos Previos”Microsoft.Extensions.DependencyInjection: Necesario para la interfazIServiceCollection.Microsoft.Extensions.Configuration: Necesario para la interfazIConfiguration.Microsoft.Extensions.Options: Necesario para la configuración de opciones.Serilog: Librería para logging estructurado.Serilog.Sinks.OpenTelemetry: Sink de Serilog para exportar logs a OpenTelemetry.Serilog.Exceptions: Librería para enriquecer logs con detalles de excepciones.Microsoft.EntityFrameworkCore: Necesario para la el enriquecedor de excepcionesDbUpdateExceptionDestructurer(opcional).OpenTelemetry.Proto: Necesario para trabajar con OpenTelemetry.
Escenarios de uso
Section titled “Escenarios de uso”Este método de extensión es particularmente útil en aplicaciones que:
- Necesitan un sistema de logging centralizado y configurable.
- Requieran enriquecer los logs con información contextual (como nombre de la app, versión, etc.).
- Deban exportar logs a sistemas de telemetría como OpenTelemetry para monitoreo y análisis.
- Deseen usar Serilog como proveedor de logging por su flexibilidad y funcionalidades.
- Quieran manejar excepciones de manera detallada en los logs.
Beneficios
Section titled “Beneficios”- Configuración centralizada: Facilita la configuración de logging desde una única sección de configuración.
- Enriquecimiento de logs: Permite agregar información contextual valiosa a los logs, como nombre de la app, versión, máquina, usuario, etc.
- Integración con OpenTelemetry: Permite exportar los logs a sistemas de telemetría para monitoreo y análisis.
- Manejo detallado de excepciones: Captura y registra información detallada de excepciones, incluyendo la pila de llamadas y propiedades relevantes.
- Flexibilidad: Permite personalizar la configuración de Serilog mediante un delegado opcional.
- Código limpio: Simplifica la configuración y uso de Serilog al extender directamente la interfaz
IServiceCollectionyIHostBuilder
Ejemplo Práctico
Section titled “Ejemplo Práctico”Supongamos que tienes una aplicación de consola .NET Core y deseas configurar un sistema de logging con Serilog y OpenTelemetry. A continuación, se muestra un ejemplo de cómo usar la extensión ServiceCollectionExtension para configurar los servicios de logging y Serilog en tu aplicación:
// See https://aka.ms/new-console-template for more information
using CodeDesignPlus.Net.Logger.Extensions;using CodeDesignPlus.Net.Logger.Sample;
var builder = Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); config.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true); }) .ConfigureServices((context, services) => { services.AddLogging(); services.AddLogger(context.Configuration);
services.AddHostedService<FakeBackgroundService>(); }) .UseSerilog();
var host = builder.Build();
host.Run();Métodos de extensión
Section titled “Métodos de extensión”La extensión ServiceCollectionExtension proporciona los siguientes métodos de extensión para configurar e integrar un sistema de logging en aplicaciones .NET:
AddLogger
Section titled “AddLogger”Type: public static IServiceCollection AddLogger(this IServiceCollection services, IConfiguration configuration)
Este método añade los servicios de logging al contenedor de inyección de dependencias. Lee la configuración de la sección especificada en LoggerOptions.Section, la valida y la vincula a la clase LoggerOptions. Tambien, adiciona los servicios core del proyecto con el método AddCore.
-
Parámetros
services: ElIServiceCollectional que se añadirán los servicios de logging.configuration: ElIConfigurationque se utilizará para configurar las opciones del logger.
-
Tipo de retorno
IServiceCollection: ElIServiceCollectionmodificado, lo que permite encadenar llamadas adicionales.
-
Excepciones
ArgumentNullException: Se lanza siservicesoconfigurationson nulos.Exceptions.LoggerException: Se lanza si la secciónLoggerOptions.Sectionno se encuentra en la configuración.
-
Ejemplo de uso
using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Configuration;using CodeDesignPlus.Net.Logger.Extensions;// Suponiendo que tienes una variable 'services' de tipo IServiceCollection// y una variable 'configuration' de tipo IConfigurationservices.AddLogger(configuration);
UseSerilog
Section titled “UseSerilog”Type: public static IHostBuilder UseSerilog(this IHostBuilder builder, Action<LoggerConfiguration> configureLogger = null)
Este método configura Serilog para usarlo como proveedor de logging, leyendo su configuración del appsettings.json. Enriquerce los logs con diferentes propiedades como, nombre de la aplicación, versión, máquina, id del proceso, etc, adicionalmente configura el OpenTelemetry cuando es requerido. Permite personalizar la configuración de Serilog a través de la acción configureLogger.
-
Parámetros
builder: ElIHostBuilderque se configurará.configureLogger: Una acción opcional que permite personalizar la configuración deLoggerConfiguration.
-
Tipo de retorno
IHostBuilder: ElIHostBuildermodificado, lo que permite encadenar llamadas adicionales.
-
Excepciones
ArgumentNullException: Se lanza sibuilderes nulo.
-
Ejemplo de uso
using Microsoft.Extensions.Hosting;using CodeDesignPlus.Net.Logger.Extensions;using Serilog;// Suponiendo que tienes una variable 'builder' de tipo IHostBuilderbuilder.UseSerilog((config) => {// Configuraciones adicionales de Serilog aquíconfig.MinimumLevel.Information();});
Conclusiones
Section titled “Conclusiones”La extensión ServiceCollectionExtension proporciona una forma conveniente y robusta de configurar e integrar un sistema de logging con Serilog y OpenTelemetry en aplicaciones .NET. Facilita la configuración, el enriquecimiento de logs y la exportación a sistemas de telemetría, permitiendo a los desarrolladores enfocarse en la lógica del negocio en lugar de la configuración del logging.