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¶
- Rotación y contenido del log de aplicación, en Despliegue — Logs.
- Métricas Micrometer expuestas en
/actuator/prometheus, en Despliegue — Salud y métricas. - El contrato de los endpoints que este log observa, en API de resolución y Pipeline de resultado de pago.
- Los criterios que fijan este comportamiento, en la Matriz de aceptación.