Saltar a contenido

Observabilidad y logs

Qué queda registrado en disco, en qué archivo, y con qué garantías respecto de la ruta caliente (INV-O01) y de los secretos (INV-S03). Fuente: backend/src/main/resources/logback-spring.xml y backend/src/main/java/com/tipre/beneficioscenter/observabilidad/ del repositorio del sistema.

logs/beneficioscenter.log — log de aplicación

Comportamiento estándar de Spring Boot (Logback), sin cambios de este proyecto: rotación diaria con compresión .gz. Detalle de rotación y de cómo se enmascaran los secretos en un mensaje de excepción, en Despliegue — Logs.

logs/traffic.log — tráfico de GatewayQR (AC-66)

Log dedicado, separado del de aplicación, del tráfico "ida y vuelta" de los endpoints de beneficios que llama el GatewayQR (/api/v1/beneficios/**: /resolver y /resultado). Una línea INFO por llamada, en el logger trafico.beneficios, con:

  • Método y URI, status HTTP de la respuesta y elapsedMs (tiempo total, incluida la autenticación).
  • requestId: correlación best-effort, extraída del cuerpo del request — si no está presente o el cuerpo no es JSON válido, queda en - y la línea se registra igual.
  • Los bodies JSON completos de request y response, capados a 8 KB cada uno.

Registrado antes y alrededor de la cadena de seguridad de X-Api-Key, así que el tiempo medido y los bodies capturados reflejan la ida y vuelta real; la respuesta que recibe el cliente nunca se altera por esto (ContentCachingResponseWrapper#copyBodyToResponse() corre siempre, incluso si el logging en sí falla).

No frena el money-path (INV-O01)

El logger trafico.beneficios está cableado a un AsyncAppender con queueSize=4096 y neverBlock=true: si la cola se llena, la línea se descarta en vez de bloquear al hilo que atiende al gateway. additivity=false: estas líneas van solo a traffic.log, nunca también a beneficioscenter.log ni a consola. Rotación diaria con compresión .gz (maxHistory: 30, totalSizeCap: 1GB).

Seguridad (INV-S03)

Los headers nunca se loguean — ni acá ni en el log de aplicación —, así que la X-Api-Key jamás llega a traffic.log. Lo único que se registra son los bodies JSON.

Gobernanza: los bodies incluyen datos sensibles

Los bodies de /resolver y /resultado incluyen invoice.taxId (CUIT) — el mismo dato que ya persiste el audit trail en consulta.request_json. Restringir el acceso al directorio logs/ en el servidor y definir una política de retención para traffic.log, igual que para cualquier otro archivo con datos personales.

Métricas Micrometer

auditoria.perdidas, auditoria.purgadas y resolver.latencia (entre otras) ya están documentadas en Despliegue — Salud y métricas; no se repiten acá.

Dónde sigue