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.phpimplementaOwenIt\Auditing\Contracts\Auditabley 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
LoginyLogout. - Arma
auditCustomNewconip,user_agent(recortado) yguard. - Establece
auditEvent(login/logout) y disparaOwenIt\Auditing\Events\AuditCustom. - Restablece estado temporal tras emitir.
- Escucha
- Persistencia: tabla
auditscreada por el paquete.
Logging con Request ID¶
- Middleware
app/Http/Middleware/RequestId.php:- Lee header
X-Request-Ido genera UUID. - Lo agrega al response como
X-Request-Idy a la request como atributorequest_id.
- Lee header
- Monolog Tap
app/Logging/RequestIdTap.php:- Processor que inyecta
extra.request_iden cada log.
- Processor que inyecta
- Configuración
config/logging.php:- Canal
stackcontap=>App\Logging\RequestIdTap::class. - En CI/local,
LOG_STACK=stderrenvía logs astderr.
- Canal
Tests¶
tests/Feature/Infrastructure/RequestIdMiddlewareTest.phpverifica headerX-Request-Idy respeto de ID entrante.- Auditoría: se generan auditorías de login/logout automáticamente; inspeccionables en
auditsen desarrollo.
Buenas prácticas¶
- Incluir
request_iden logs externos (Sentry, Papertrail, etc.). - Evitar auditar campos sensibles; usar
auditExcludey normalizarauditCustomNew. - Añadir asserts en tests para auditorías clave cuando aplique.