2.9 KiB
2.9 KiB
Logs & audit
Page : /logs (admin)
Affiche en temps réel le contenu de data/logs/operations.log avec un mode prod (lignes principales) et un mode debug (lignes indentées détaillées).
Format des logs
[14:32:01] [abs] prof.demo : Dupont Marc (1MAB1) — 04.02.2026 P6 : N → E
[14:32:08] Sync Escada démarrée par prof.demo — 3 classe(s) [abs/forcé, BN] : 1MAB1, 2EM1, 1MAB2
[14:32:15] [sync] Connexion Escadaweb OK
[14:34:42] [sync] Téléchargement absences 1MAB1 (4.2 MB)
[14:35:01] ALL_DONE confirme — phase import
[14:35:30] Résultats chargés — sync terminée OK
- Lignes non indentées : événements importants (sync démarrée/terminée, modif d'absence, action admin)
- Lignes indentées (avec deux espaces) : sortie verbeuse des sous-processus Selenium / parser PDF — visibles uniquement en mode debug
Catégories d'événements tracés
Modifications de données
| Préfixe | Événement |
|---|---|
[abs] |
Modification d'absence (qui, quel apprenti, quelle période, ancien → nouveau type) |
[cron] |
Création / édition / activation / suppression d'une tâche planifiée |
Opérations Escada manuelles
Rafraîchissement liste classes Escada par {user}Sync Escada démarrée par {user} — N classe(s) [options] : ...Push Escada démarré par {user}Push terminé — ok:N erreurs:M
Sous-processus
[refresh],[sync],[push]: sortie standard du subprocess Selenium correspondant
Cron automatique
[run_imports] démarré[run_imports] abs CLASSE: N nouv / N modif / ...[run_imports] terminé OK
Localisation physique
- App :
/opt/eptm-dashboard/data/logs/operations.log(ligne par ligne, append-only) - Cron jobs :
/logs/cron/cron-{job_id}-{timestamp}.log(un fichier par exécution, persistant via bind mount Docker)
Rotation
Pas de rotation automatique pour l'instant. À long terme :
# Garder les 30 derniers jours
find data/logs/ -name "operations.log" -mtime +30 -delete
Filtrer / chercher
Sur la page /logs :
- Recherche texte simple
- Filtre par date
- Toggle prod/debug
En CLI :
docker exec eptm-dashboard-app-1 grep -i "force" data/logs/operations.log | tail -50
docker exec eptm-dashboard-app-1 grep "\[abs\] prof.demo" data/logs/operations.log
Champ updated_by côté DB
Indépendamment de operations.log, chaque table sensible stocke directement qui a fait quoi :
| Table | Champ |
|---|---|
Absence |
updated_by, updated_at |
Import |
imported_by |
ImportBN |
imported_by |
ImportMatu |
imported_by |
Permet de retrouver l'historique même si le log fichier est supprimé.