Nettoyage
Les journaux d'audit grossissent avec le temps. Les cadres réglementaires comme le RGPD encouragent la minimisation des données — ne conserver les données que tant qu'elles servent un objectif légitime. La commande audit:prune supprime les journaux d'audit plus anciens qu'une période de rétention configurable, gardant votre base de données légère sans intervention manuelle.
Utilisation de base
php artisan audit:prune
Cette commande supprime les journaux d'audit légers (non chaînés, où hash IS NULL) plus anciens que la période de rétention configurée (par défaut : 90 jours). Par défaut, les logs chaînés (HasAuditTrail) sont exclus de la purge pour préserver l'intégrité de la chaîne de hash. La commande demande une confirmation avant de procéder à la suppression.
Configuration
Définissez la période de rétention par défaut dans config/audit-chain.php :
'retention' => [ 'days' => 90, ],
Options de la commande
Période de rétention personnalisée
Remplacez la période de rétention configurée avec le flag --days :
# Ne conserver que les 30 derniers jours php artisan audit:prune --days=30 # Conserver une année complète php artisan audit:prune --days=365
Filtrer par type de model
Nettoyez les journaux pour un model spécifique uniquement, en laissant les autres journaux d'audit intacts :
php artisan audit:prune --type="App\Models\PageView"
C'est utile lorsque différents models ont des exigences de rétention différentes — vous pourriez conserver les journaux de transactions financières pendant 7 ans mais nettoyer les journaux de pages vues après 30 jours.
Inclure les logs chaînés
Par défaut, audit:prune ne supprime que les logs légers (sans chaîne de hash). Pour purger également les logs chaînés, utilisez le flag --include-chained. Cela nécessite le flag --force et affiche un avertissement, car la suppression de logs chaînés affecte la vérification de la chaîne :
php artisan audit:prune --days=365 --include-chained --force
Lorsque des logs chaînés sont purgés, le hash du dernier log supprimé est enregistré dans la colonne audit_chain_state.checkpoint_hash. Ce checkpoint sert de point de départ pour les futures vérifications de chaîne — permettant à audit:verify de reprendre là où la chaîne purgée s'est arrêtée au lieu d'échouer sur la première entrée.
Forcer la suppression
Ignorez l'invite de confirmation avec --force. Requis lors de l'utilisation de --include-chained :
php artisan audit:prune --force
Combiner les flags
php artisan audit:prune --days=30 --type="App\Models\PageView" php artisan audit:prune --days=365 --include-chained --force
Fonctionnement
La commande supprime les enregistrements par lots de 1 000 pour éviter de verrouiller la table de la base de données pendant de longues périodes. C'est sûr pour les grandes tables avec des millions de journaux d'audit — la commande supprime progressivement les lots jusqu'à ce que tous les enregistrements correspondants soient supprimés.
$ php artisan audit:prune --days=90 --no-interaction About to delete 15,234 audit log(s) older than 90 day(s). Deleted 1000 / 15234... Deleted 2000 / 15234... ... Deleted 15234 / 15234... Pruned 15234 audit log(s).
Si aucun journal ne correspond aux critères de rétention, la commande se termine proprement :
No audit logs older than 90 day(s) found.
Planification
Pour un nettoyage automatisé, planifiez la commande de nettoyage dans routes/console.php :
Schedule::command('audit:prune')->daily();
Consultez Planification pour une configuration cron complète.
Choisir une période de rétention
Votre période de rétention dépend de vos exigences de conformité :
| Réglementation | Rétention typique |
|---|---|
| RGPD | Aussi courte que justifiable (principe de minimisation des données) |
| SOX | 7 ans |
| HIPAA | 6 ans |
| PCI DSS | 1 an |
| NIS2 | Pas de minimum spécifique, mais suffisant pour l'investigation des incidents |
Définissez retention.days pour satisfaire votre obligation la plus exigeante. Utilisez le flag --type et la planification pour appliquer des périodes de rétention différentes à différents models.