LogoLogo
  • Inicio
  • ¿Qué es Dinaup?
  • ¿Qué es Ready To Go?
  • Precios
  • Historial de Cambios
    • Principal
      • 62.6759 [2025-04-7]
      • 62.6753 [2025-03-31]
      • Próxima Versión
    • Beta
      • 2025-04-16
      • 2025-05-15
  • Ready To Go
    • Pymes
      • Mi Empresa
      • Ejercicios
      • Tesorería
        • Cuentas bancarias
        • Bancos
        • Cajas
        • Conciliación Bancaria
        • Reglas de Movimientos Bancarios
        • Auditoría de reglas y clasificación de movimientos
        • Cómo importar Extractos Bancarios
      • Impuestos
      • Retenciones
      • Facturación
        • Categorías de Compra
        • Categorías de Venta
        • Gestión de Compras y Gastos
        • Gestión de Ventas e Ingresos
        • Ventana de Factura
        • Tipos de Compras y Gastos
        • Tipos de Venta e Ingresos
        • Libros de Compra y Gastos
        • Libros de Venta e Ingresos
        • Cómo registrar una factura intracomunitaria
      • Inventario y Precios
        • Productos
        • Almacenes
        • Gestión de Precios
        • Gestión de Pedidos
          • Guía Inicio: Pedidos
      • Clientes, Proveedores, Bancos...
        • Gestión de Proveedores
        • Gestión de Clientes
      • Documentos oficiales
      • Configuración
      • Análisis
      • Procesos
        • Ponerse al Día: Detección de Anomalías
        • Exportación
      • Ejemplos prácticos
        • ¿Cómo contabilizar factura de Revolut?
        • ¿Cómo contabilizar factura de Miro?
        • ¿Cómo contabilizar factura de ChatGPT?
        • ¿Cómo contabilizar factura de Petropix?
      • Preguntas Frecuentes
    • TPV
      • Guía Configuración de Cajas
      • Guía Cierres de Caja
      • Modo Kiosko
      • Guía Configuración: TPV
      • Recursos
    • Proyectos
      • Proyectos
      • Tareas
      • Dependencias
      • To-Do
      • Hilos y Temas
    • CRM
      • Seguimientos
      • Procesos y Fases
      • Kanban
    • Recursos Humanos
      • Introducción al Control Horario
      • Guía Alta de Empleado
      • Guía Sistema de Fichajes
      • Cómo crear horarios laborales paso a paso
      • Guía calendario de festivos
      • Guía para asignar un horario a un empleado
      • Guía Vacaciones y Ausencias
      • Introducción Sistema de Fichaje
      • Línea de Tiempo
      • Empleados
      • Horarios
      • Festivos
      • Vacaciones y Ausencias
      • Departamentos
      • Cargos
      • Nóminas
      • Turnos
      • Fichaje
      • Horas Extra
      • Exportación
      • Análisis
      • Asignación de Horarios a Empleados
    • Marketing
      • Avatares
      • Objeciones
      • Puntos de Dolor
      • Casos de éxito
      • Testimonios
      • Camapañas
      • Anuncios
  • Administrador
    • Gestión de Usuarios
    • Permisos y Roles
    • Claves API
    • Cuenta y Facturación
      • Almacenamiento en Dinaup
  • Integraciones
    • Zapier, Make y n8n
      • Dinaup & n8n
    • Power BI
    • Dinaup PG Sync
    • Email
    • Cloudflare Worker
  • Desarrollo
    • Información Clave
      • Límites
    • Convención Desarrollo
    • Flex
      • Secciones
      • Documentos dinámicos
        • Envío de Emails
      • Campos
      • Informes
        • Informes API
      • Algoritmos
      • Scripts
      • Flujos
    • Dinaup SDK (.NET)
      • Sections
      • Reports
      • WriteOperations
        • Ejemplo: Agregar un Recambio en Dinaup (.NET)
        • Ejemplo: Ejecucción WriteOperations por Lotes (.NET)
        • Ejemplo: Agregar un Cliente desde Dinaup (.NET)
      • DynamicDocuments
      • Dinaup.Logs (Logging)
    • MyDinaup (.NET)
      • Actualizar MyDianup
    • Dinaup.Database (.NET)
    • Open Soruce
      • Ready To Blazor
      • Ready To Automate
    • WebHook
      • Entrantes
      • Salientes
    • Dinaup Vault
    • Ecosistema Desarrollo
    • Casos de Uso
      • UI/UX Personalizada
  • Casos de Éxito
    • Autodesguaces Alicante
  • Recursos
    • Listado de Secciones
      • Solución Pymes
        • Entidades
        • Actividades de Empresa
        • Almacenes
        • Empresas Administradas
        • Datos fiscales
        • Entidades
        • Retenciones
        • Impuestos
        • Tablas de IRPF / Sociedades
        • Epígrafe actividades económica
        • Productos
        • Grupos de Almacenes
        • Zonas de Almacén
        • Huecos en almacenes
        • Salidas de inventario
        • Entradas de inventario
        • Categorías de Compra
        • Lotes de Compra
        • Lotes de Producto
        • Libros registros de Compras / Gastos
        • Salidas de Compra
        • Entradas de Compra
        • Pago de Compras
        • Catálogo de Compras
        • Compras / Gastos
        • Ventas / Ingresos
        • Documentos Oficiales
        • Catálogos de Venta
        • Cuentas Bancarias
        • Categorías de Venta
        • Cobros de Venta
        • Entradas de Venta
        • Salidas de Venta
        • Libros registros de Ventas / Ingresos
        • Tipos de Cliente
        • Pedidos
        • Canales de Venta
        • Métodos de Pago
        • Monedas
        • Cajas
        • Cierres de Caja
        • Movimientos Bancarios
        • Movimientos de Caja
        • Reglas de clasificación de movimientos bancarios
        • Asientos Contables
        • Cuadro de Cuentas
        • Ejercicios
        • Cuadro de Cuentas Oficiales
        • Inmovilizado
        • Tipos de Venta
        • Tipos de Compra
      • Solución CRM
        • Seguimientos de Clientes
        • Procesos de Venta
        • Fase de procesos de Venta
        • Eventos de CRM
      • Solución Proyectos
        • Proyectos v2
        • Tareas
      • Solución Recursos Humanos
        • Departamentos
        • Subdepartamentos
        • Definición de Jornadas
        • Turnos
        • Horarios
        • Festivos
        • Asignaciones de Horarios
        • Registros de fichajes laboral
        • Motivos de Ausencias y Retrasos
        • Motivos de Horas Extras
        • Vacaciones, Bajas y Ausencias
        • Nóminas
      • Solución Marketing
        • Avatares
        • Productos de Marketing
        • Objeciones
        • Casos de éxito
        • Testimonios
        • Puntos de Dolor
        • Resultados de Campaña
        • Campañas
        • Anuncios
        • Versiones de Anuncios
        • Contenido Redes Sociales
        • Estrategias de Marketing
      • Otras
        • Empleados
        • Zonas horarias
        • Países
        • Comunidades autónomas
        • Provincias
        • Municipios
        • Códigos postales
        • Sección de pruebas API
        • Notificaciones
        • Logs de Eventos Legales
    • Hint
    • Prototipado Flex
    • Proceso Desarrollo
    • Radzen (Blazor Componentes)
    • Listado de Partners
      • Top Financial Advisor
    • Viaje del Emprendedor en Dinaup
    • Recursos Flex
      • Documentos Dinámicos
        • Ticket - Venta
        • Impresión Venta
        • Ticket - Pedido
        • Impresión Pedido
        • Código de Barras - Hueco de Almacén
        • Código de Barras - Recambios
  • Comunidad
    • Tickets Soporte
  • Términos y Condiciones
    • Términos y Condiciones de Uso
    • Política de Impagos de Dinaup
    • ¿Qué significa tener un Partner asociado?
      • Iniciar una disputa con un Partner
  • Comunidad
  • Blog
Con tecnología de GitBook
En esta página
  • ¿Por qué Dinaup.Logs?
  • Inicialización
  • Niveles y formato de logging
  • Contextos enriquecidos
  • Métricas integradas
  • Helpers HandleAction y HandleActionAsync
  • Buenas prácticas
  1. Desarrollo
  2. Dinaup SDK (.NET)

Dinaup.Logs (Logging)

¿Por qué Dinaup.Logs?

Dinaup.Logs nace de la necesidad de centralizar y estandarizar los registros de la plataforma Dinaup, aportando:

  • Trazabilidad completa de cada request y proceso.

  • Métricas automáticas para detectar cuellos de botella.

  • ElasticSearch como backend opcional para búsquedas y paneles en tiempo real.


Inicialización

La inicialización acostumbra a hacerse en Program.cs o en tu Startup de .NET 9+.

using Dinaup.Logs;

var elastic = new Logs.ElasticConfig("https://elastic.xxx.xxx", "xxxxx");
Logs.Initialize(
    applicationName: "XXXX",
    applicationVersion: "1.0.0",
    elasticConfig: elastic,
    logFilePath: "logs/log.txt",
    environment: Env.IsDevelopment() ? "Debug" : "Release",
    autoExportContextMetric: false
);

Tip: Activa autoExportContextMetric si quieres exportar automáticamente métricas de cada contexto.


Niveles y formato de logging

Dinaup.Logs envuelve Serilog, así que dispones de los niveles clásicos (Verbose, Debug, Information, Warning, Error, Fatal).

Logs.Information("Usuario {UserId} inició sesión", userId);
Logs.Warning("Balance negativo detectado: {Balance}", balance);

Cambia el nivel global en caliente si lo necesitas:

Logs.SetLoggingLevel(LogEventLevel.Debug);

Contextos enriquecidos

Los contextos añaden metadatos automáticos a cada mensaje sin esfuerzo:

5.1 BeginContext

Agrupa los logs de un proceso concreto y opcionalmente incrementa un contador.

Recomendación clave: pasa siempre los parámetros usando nameof(MiClase) y nameof(MiMétodo) en lugar de magic strings. De este modo tu código es refactoring‑safe: si cambias el nombre de la clase o del método, el compilador lo detectará inmediatamente.

public class PagosService
{
    public void GenerarFactura()
    {
        using (Logs.BeginContext(nameof(PagosService), nameof(GenerarFactura)))
        {
            Logs.Debug("Preparando borrador de factura");
            // ... tu lógica aquí
        }
    }
}

5.2 BeginCorrelationContext

Ideal para flujos distribuidos: incluye un CorrelationId que viaja por microservicios.

var correlationId = Guid.NewGuid().ToString();
using (Logs.BeginCorrelationContext(nameof(PagosService), nameof(GenerarFactura), correlationId))
{
    ...
}


Métricas integradas

Cuando activas autoExportContextMetric, cada llamada a BeginContext incrementa un CounterMetric etiquetado con component y action.

Crear contadores manuales:

static CounterMetric pagosOk = new CounterMetric("pagos_ok", "hit", 0, new() {{"status", "ok"}});
...
pagosOk.Increment();

Estas métricas se envían a Elastic Search.


Helpers HandleAction y HandleActionAsync

Envuelven código en un bloque try/catch con cronómetro incorporado y logean éxito o excepción.

var resultado = Logs.HandleAction(nameof(PagosService), nameof(Cobrar), () =>
{
   /// ...
}, new { pedido.Id, pedido.Total });

if (!resultado.IsOk) return Results.BadRequest(resultado.MessageException);

Versión asíncrona:

await Logs.HandleActionAsync(nameof(EmailService), nameof(EnviarFactura), async () =>
{
    await emailSender.SendAsync(...);
});

Buenas prácticas

  • No silencies excepciones: si atrapas una, logéala con Error y vuelve a lanzarla o maneja el resultado.

  • Evita logs sensibles (tokens, contraseñas). Usa propiedades parametrizadas.

  • Cierra al apagar la app: Logs.CloseAndFlush();

AnteriorDynamicDocumentsSiguienteMyDinaup (.NET)

Última actualización hace 1 día