Explicación: Auditoría vs Logging¶
Esta página explica qué se audita y qué se registra en logs en este proyecto, y por qué.
¿Por qué separar auditoría y logging?¶
- La auditoría responde a "quién cambió qué y cuándo".
- El logging responde a "qué ocurrió en la ejecución" (trazabilidad técnica) y facilita depuración.
Auditoría (laravel-auditing)¶
app/Models/User.php
implementaOwenIt\Auditing\Contracts\Auditable
y usa el traitAuditable
.- Excluye atributos sensibles en
$auditExclude
. - Usa propiedades temporales (
$auditEvent
,$auditCustomOld
,$auditCustomNew
,$isCustomEvent
).
- Excluye atributos sensibles en
- Eventos personalizados (en
app/Providers/AppServiceProvider.php
):- Escucha
Login
yLogout
. - Arma
auditCustomNew
conip
,user_agent
(recortado) yguard
. - Establece
auditEvent
(login/logout) y disparaOwenIt\Auditing\Events\AuditCustom
. - Restablece estado temporal tras emitir.
- Escucha
- Persistencia: tabla
audits
creada por el paquete.
Logging con Request ID¶
- Middleware
app/Http/Middleware/RequestId.php
:- Lee header
X-Request-Id
o genera UUID. - Lo agrega al response como
X-Request-Id
y a la request como atributorequest_id
.
- Lee header
- Monolog Tap
app/Logging/RequestIdTap.php
:- Processor que inyecta
extra.request_id
en cada log.
- Processor que inyecta
- Configuración
config/logging.php
:- Canal
stack
contap
=>App\Logging\RequestIdTap::class
. - En CI/local,
LOG_STACK=stderr
envía logs astderr
.
- Canal
Tests¶
tests/Feature/Infrastructure/RequestIdMiddlewareTest.php
verifica headerX-Request-Id
y respeto de ID entrante.- Auditoría: se generan auditorías de login/logout automáticamente; inspeccionables en
audits
en desarrollo.
Buenas prácticas¶
- Incluir
request_id
en logs externos (Sentry, Papertrail, etc.). - Evitar auditar campos sensibles; usar
auditExclude
y normalizarauditCustomNew
. - Añadir asserts en tests para auditorías clave cuando aplique.