Un client signale une erreur survenue il y a trois semaines. Dans storage/logs, vous trouvez soit un seul fichier laravel.log énorme, soit des fichiers par jour qui ne remontent pas plus loin que deux semaines. Tout se règle dans config/logging.php et dans le .env : le canal daily crée un fichier par jour, et LOG_DAILY_DAYS fixe combien de fichiers sont gardés. L'ancien réglage log_max_files de config/app.php (Laravel 5) n'existe plus : il n'apparaît nulle part dans le code du framework actuel.
Où se règle l'historique des logs aujourd'hui ?
La documentation est claire : toutes les options de journalisation sont dans config/logging.php. Voici les lignes utiles du fichier livré avec une application neuve :
// config/logging.php 'default' => env('LOG_CHANNEL', 'stack'), 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'replace_placeholders' => true, ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'max_files' => env('LOG_DAILY_DAYS', 14), 'replace_placeholders' => true, ], ],
Le .env d'une nouvelle application contient LOG_CHANNEL=stack et LOG_STACK=single. Le canal par défaut, stack, ne contient donc que single : tout part dans un seul fichier storage/logs/laravel.log, qui n'est jamais découpé ni nettoyé.
Comment avoir un fichier de log par jour ?
Il suffit de mettre le canal daily dans la pile :
# .env LOG_CHANNEL=stack LOG_STACK=daily
Dans notre test, un Log::info() écrit alors dans storage/logs/laravel-2026-10-19.log, un nouveau fichier étant créé chaque jour. LOG_CHANNEL=daily donne le même fichier en se passant de la pile ; nous gardons stack, qui permet d'ajouter un autre canal plus tard sans changer le canal par défaut.
Combien de jours sont gardés, et comment en garder plus ?
Par défaut, 14 : c'est la valeur de repli de LOG_DAILY_DAYS dans la ligne max_files ci-dessus. Pour garder un mois :
# .env LOG_DAILY_DAYS=30
Trois précisions, vérifiées en créant de faux fichiers de log datés avant d'écrire :
- C'est un nombre de fichiers, pas de jours. Les fichiers les plus anciens au-delà de la limite sont supprimés. Un jour sans aucun message ne crée pas de fichier : avec
LOG_DAILY_DAYS=3et des fichiers du 20 septembre et du 10 octobre, ces deux fichiers ont été gardés avec celui du jour. - Le ménage se fait à la création du fichier du jour, au premier message écrit. Des fichiers anciens ajoutés après, le même jour, sont restés en place.
LOG_DAILY_DAYS=0garde tout. Monolog, la bibliothèque de logs utilisée par Laravel, ne supprime alors aucun fichier : à surveiller sur un serveur au disque limité.
Si votre config/logging.php date d'une version plus ancienne et contient 'days' => 14 à la place de max_files, il reste lu : Laravel prend max_files, sinon days, sinon 7.
Après php artisan config:cache, changer LOG_STACK dans le .env n'a rien changé dans notre test : logging.channels.stack.channels est resté à single jusqu'à ce que le cache soit reconstruit. Relancez php artisan config:cache après chaque modification du .env : nous détaillons pourquoi dans env() renvoie null après un déploiement.
Et un fichier par mois ?
Le framework propose aussi un canal monthly (un fichier par mois). Dans le fichier livré, il garde 3 fichiers, valeur écrite en dur ('max_files' => 3) et non reliée à une variable du .env : pour la changer, modifiez directement config/logging.php, puis utilisez LOG_STACK=monthly.
Comment vérifier la configuration active ?
Deux commandes suffisent :
php artisan about --only=drivers php artisan config:show logging.channels.daily
La première affiche la ligne Logs, par exemple stack / single avant le changement et stack / daily après. La seconde affiche les options du canal, dont max_files, avec la valeur réellement retenue (14 par défaut, sinon celle de LOG_DAILY_DAYS). Un ls storage/logs confirme enfin la présence des fichiers datés.
Nous réglons ces points sur les applications que nous hébergeons et maintenons, comme sur les applications sur mesure que nous développons. Des logs introuvables le jour où vous en avez besoin ? Parlons-en.
- La rétention se règle dans
config/logging.phpet le.env, plus dansconfig/app.php. LOG_STACK=daily: un fichier par jour, 14 gardés par défaut.LOG_DAILY_DAYScompte des fichiers, pas des jours ;0garde tout.- Relancer
php artisan config:cacheaprès avoir modifié le.enven production.
Testé avec Laravel 13.37.0, Monolog 3.12.1 et PHP 8.3.6.
Questions fréquentes
Où se trouvent les fichiers de log de Laravel ?
Dans storage/logs : laravel.log avec le canal single, laravel-AAAA-MM-JJ.log (un par jour) avec le canal daily. Les deux canaux écrivent à partir du chemin storage_path('logs/laravel.log') défini dans config/logging.php.
Les anciens fichiers disparaissent-ils dès que je baisse LOG_DAILY_DAYS ?
Non. Le ménage a lieu quand le fichier du jour est créé, au premier message écrit ce jour-là. Si ce fichier existe déjà, les fichiers en trop restent jusqu'au lendemain.
Le réglage log_max_files de config/app.php fonctionne-t-il encore ?
Non. Il date de Laravel 5 et n'apparaît plus dans le code du framework. Le nombre de fichiers gardés se règle avec max_files dans config/logging.php, ou LOG_DAILY_DAYS dans le .env.
Peut-on garder les logs sans limite ?
Oui, avec LOG_DAILY_DAYS=0 : aucun fichier n'est supprimé. Pensez alors à surveiller la place disque du serveur, ou à archiver les anciens fichiers par un autre moyen.