Dinaup.Logs: Manual de Uso de la Biblioteca
Dinaup.Logs es una biblioteca de logging para aplicaciones .NET.
Requisitos Previos
Antes de comenzar, asegúrate de tener:
.NET 8
Acceso a un servidor de Elasticsearch si planeas utilizar este sink.
Webhooks configurados para Microsoft Teams y/o Mattermost si deseas enviar logs a estas plataformas.
Instalación
Agregar la Biblioteca Dinaup.Logs:
Configuración
Configuración de Elasticsearch
Para enviar logs a Elasticsearch, necesitas proporcionar detalles de conexión mediante la clase ElasticConfig
.
Ejemplo de Configuración:
Configuración de Integraciones (Teams y Mattermost)
Para enviar logs a plataformas como Microsoft Teams o Mattermost, utiliza la clase IntegrationsConfig
.
Ejemplo de Configuración:
Inicialización de la Biblioteca
Antes de utilizar Dinaup.Logs, debes inicializarla con la configuración adecuada.
Parámetros de Inicialización:
applicationName
: Nombre de la aplicación.applicationVersion
: Versión de la aplicación.elasticConfig
: Configuración de Elasticsearch (opcional).integrationsConfig
: Configuración de integraciones como Teams o Mattermost (opcional).logFilePath
: Ruta del archivo de logs.environment
: Entorno de ejecución (e.g., Desarrollo, Producción).autoExportContextMetric
: Habilita la exportación automática de métricas de contexto.
Métodos de Logging
Dinaup.Logs ofrece métodos para registrar logs en diferentes niveles de severidad.
Logging Básico
Los métodos disponibles son:
Verbose
: Información detallada, útil para diagnóstico.Debug
: Información útil para depuración.Information
: Información general sobre el flujo de la aplicación.Warning
: Indicaciones de posibles problemas.Error
: Errores que no detienen la aplicación.Fatal
: Errores críticos que probablemente detendrán la aplicación.
Ejemplo de Uso:
Logging con Excepciones
Además de los mensajes básicos, puedes registrar excepciones para obtener detalles completos del error.
Ejemplo de Uso:
Gestión de Contexto
La gestión de contexto permite agregar información adicional a los logs, facilitando el seguimiento de eventos relacionados.
Contexto Simple
Puedes iniciar un contexto usando BeginContext
, que agrega propiedades al contexto de logging utilizando nameof()
para los componentes y acciones.
Ejemplo de Uso dentro de una Clase y Método:
Al finalizar el bloque using
, el contexto se descarta automáticamente.
Contexto con Correlación
Para rastrear eventos relacionados a través de diferentes partes de la aplicación, utiliza BeginCorrelationContext
con un CorrelationId
.
Ejemplo de Uso dentro de una Clase y Método:
En este ejemplo, tanto ProcesarPedido
como ConfirmarPedido
comparten el mismo CorrelationId
, permitiendo rastrear todos los logs relacionados con esta operación.
Validación de Parámetros
Dinaup.Logs ofrece métodos para validar parámetros y registrar errores automáticamente si las validaciones fallan.
Métodos Disponibles:
ValidateParameter(Guid param, string paramName)
ValidateParameter<T>(T param, string paramName)
ValidateParameter(string param, string paramName)
ValidateParameter(IEnumerable param, string paramName, int maxItems)
ValidateParameter(IEnumerable param, string paramName)
Ejemplo de Uso:
Si alguno de los parámetros no cumple con las condiciones, se registrará un error y se lanzará una excepción correspondiente.
Cómo Cambiar el Nivel de Logging
La biblioteca utiliza un LoggingLevelSwitch
de Serilog que puede ser ajustado en tiempo de ejecución. Para cambiar el nivel de logging, utiliza el método SetLoggingLevel
.
Ejemplo de Cambio de Nivel de Logging:
Cerrar y Volcar Logs
Es importante cerrar y volcar los logs al finalizar la aplicación para asegurarse de que todos los eventos sean persistidos correctamente.
Se recomienda llamar a este método en eventos de cierre de la aplicación, como en el método Main
o en manejadores de eventos de cierre.
Consideraciones Finales
Manejo de Excepciones Globales: La biblioteca está configurada para capturar excepciones no manejadas y excepciones de tareas no observadas, registrándolas automáticamente como
Fatal
.Rendimiento: Al configurar los sinks y el nivel de logging apropiadamente, puedes optimizar el rendimiento de tu aplicación evitando la sobrecarga de logs innecesarios.
Extensibilidad: Dinaup.Logs puede ser extendida para soportar nuevos sinks o funcionalidades adicionales, aprovechando la flexibilidad de Serilog.
Seguridad: Asegúrate de proteger las credenciales y endpoints sensibles utilizados en las configuraciones, especialmente al manejar autenticaciones básicas para Elasticsearch.
Uso de Métricas
Dinaup.Logs soporta principalmente dos tipos de métricas:
CounterMetric
se utiliza para contar eventos específicos, como el número de solicitudes recibidas, archivos subidos, o errores ocurridos. Es una métrica incrementable que refleja la cantidad total de veces que un evento ha ocurrido.HistogramMetric
permite distribuir eventos en diferentes rangos o "buckets". Es útil para medir la distribución de valores, como los tiempos de respuesta de una API, tamaños de archivos, etc.
Inicialización de Métricas
Antes de utilizar las métricas, asegúrate de haber inicializado Dinaup.Logs correctamente. La recolección automática de métricas puede ser habilitada durante la inicialización.
autoExportContextMetric
: Al establecerse entrue
, las métricas relacionadas con el contexto se exportarán automáticamente.
Uso de CounterMetric
Descripción
CounterMetric
es ideal para contar eventos discretos. Cada vez que ocurre un evento, se incrementa el contador correspondiente.
Ejemplo de Uso
Explicación:
Creación del CounterMetric:
new CounterMetric("ArchivosSubidos")
: Crea un contador llamado "ArchivosSubidos".new CounterMetric("LlamadasAPI", "request", 0, tags)
: Crea un contador "LlamadasAPI" de tipo "request" con un conteo inicial de 0 y etiquetas adicionales.
Incremento del Contador:
contadorArchivosSubidos.Increment();
: Incrementa el contador en 1.Puedes llamar a
Increment()
múltiples veces según sea necesario.
Exportación de Métricas:
MetricExporter.Flush();
: Envía las métricas recolectadas al backend configurado (por ejemplo, Elasticsearch).
Uso de HistogramMetric
Descripción
HistogramMetric
se utiliza para distribuir valores en rangos específicos (buckets). Es útil para analizar la distribución de métricas como tiempos de respuesta, tamaños de archivos, etc.
Ejemplo de Uso
Explicación:
Definición de Buckets:
Se crean rangos específicos para categorizar los tiempos de respuesta de la API.
Etiquetas Adicionales:
Las etiquetas (
tags
) permiten categorizar aún más las métricas, facilitando su filtrado y análisis posterior.
Creación del HistogramMetric:
new HistogramMetric("TiemposRespuestaAPI", "duration_request", tags, responseTimeBuckets)
: Crea un histograma llamado "TiemposRespuestaAPI" de tipo "duration_request" con las etiquetas y buckets definidos.
Registro de Valores:
responseTimeHistogram.Record(50);
: Registra un tiempo de respuesta de 50 ms, incrementando el bucket correspondiente.Valores fuera de los rangos definidos incrementan los buckets de underflow o overflow.
Exportación de Métricas:
MetricExporter.Flush();
: Envía las métricas recolectadas al backend configurado.
Exportación de Métricas
Para que las métricas recolectadas sean útiles, deben ser enviadas a un backend donde puedan ser almacenadas y analizadas. Dinaup.Logs utiliza un componente llamado MetricExporter
para manejar esta exportación.
Ejemplo de Exportación
Consideraciones:
Asegúrate de que
MetricExporter.Flush()
esté correctamente implementado para enviar las métricas al backend deseado, como Elasticsearch, Prometheus, etc.Puedes configurar
MetricExporter
para que realice la exportación en intervalos regulares o manualmente después de recolectar un conjunto de métricas.
Acceso y Visualización de Métricas
Para acceder a las métricas recolectadas, es necesario implementar métodos que expongan estas métricas desde la clase Dinaup.Logs
. A continuación, se muestra cómo podrías implementar y utilizar dichos métodos.
Implementación de Métodos para Exponer Métricas
Ejemplo de Acceso a Métricas
Explicación:
Recuperación de Métricas:
GetAllCounterMetrics()
: Obtiene todas las métricas de tipo contador.GetAllHistogramMetrics()
: Obtiene todas las métricas de tipo histograma.
Visualización de Métricas:
Se iteran las métricas recuperadas y se muestran sus detalles, incluyendo nombres, tipos, conteos y etiquetas.
Para las métricas de histograma, también se muestran los conteos por cada bucket, incluyendo underflow y overflow.
Consideraciones Adicionales
Implementación de
MetricExporter
: Asegúrate de queMetricExporter
esté correctamente implementado para enviar las métricas al backend deseado. Esto puede incluir la configuración de endpoints, autenticación y formatos de datos.Rendimiento: La recolección y exportación de métricas debe ser eficiente para no afectar el rendimiento de la aplicación. Considera implementar mecanismos de buffering o exportación asíncrona.
Seguridad: Protege las credenciales y endpoints utilizados para la exportación de métricas, especialmente si se envían a servicios externos como Elasticsearch.
Escalabilidad: Diseña la recolección y exportación de métricas de manera que escale con el crecimiento de la aplicación, manejando un gran volumen de eventos y datos sin degradar el rendimiento.
Personalización de Métricas: Puedes extender las funcionalidades de métricas según las necesidades específicas de tu aplicación, agregando nuevas métricas o tipos según sea necesario.
Este documento proporciona una guía detallada para utilizar las funcionalidades de métricas en Dinaup.Logs. Al implementar y gestionar métricas de manera efectiva, podrás obtener insights valiosos sobre el rendimiento y comportamiento de tus aplicaciones, facilitando la toma de decisiones informadas y la optimización continua.