categories: php title: Gestion des logs d'erreurs PHP-FPM pour les versions >= 8 Sur les versions supérieures à 8 de PHP-FPM, l'enregistrement des logs d'erreurs via FPM ne fonctionne pas "out of the box". Pour faire fonctionner l'enregistrement des logs d'erreur, il y a deux solutions : #### 1/ via PHP-FPM Dans la configuration du pool FPM : ```bash user = foo group = bar php_admin_value[error_log] = /var/log/php/XXX/php-errors.log php_admin_value[error_reporting] = E_ALL & ~E_NOTICE ``` Attention ! Le répertoire cible doit appartenir à l'utilisateur propriétaire du pool FPM. Résultat: ```bash # ls -la /var/log/php/XXX/ total 6468 drwxr-xr-x 2 foo bar 4096 Sep 9 17:17 . drwxr-xr-x 4 root root 4096 Apr 6 2023 .. -rw-r----- 1 foo bar 0 Sep 9 17:17 php-errors.log -rw------- 1 foo bar 0 Sep 9 14:44 php-slow.log ``` #### 2/ via rsyslog Dans la configuration du pool FPM, il faut indiquer l'utilisation de **syslog** et de son identifiant : ```bash user = foo group = bar php_admin_value[error_log] = syslog php_admin_value[error_reporting] = E_ALL & ~E_NOTICE php_admin_value[syslog.ident] = "pool_XXX" ``` Et dans rsyslog : ```bash # cat /etc/rsyslog.d/10-php $FileCreateMode 0644 $Template php_pool_log,"/var/log/php/%syslogtag:R,ERE,2,DFLT:pool(_)(.*):--end%/php-errors.log" :syslogtag, startswith, "pool" ?php_pool_log :syslogtag, startswith, "pool" stop ``` Explications: 1. on configure le **error_log** du pool FPM sur **syslog** 2. on spécifique le **syslog_ident** du pool FPM 3. on configure rsyslog pour "fetcher" l'identifiant précédant, et écrire les données du buffer dans **/var/log/php//php-errors.log** Comme résultat: ```bash # ls -la /var/log/php/XXX/ total 6468 drwxr-xr-x 2 root adm 4096 Sep 9 17:17 . drwxr-xr-x 4 root root 4096 Apr 6 2023 .. -rw-r----- 1 root adm 0 Sep 9 17:17 php-errors.log -rw------- 1 root adm 0 Sep 9 14:44 php-slow.log ``` #### Rotation des logs ! Bien entendu, il faut penser à mettre en place une rotation de ces nouveaux logs: ```bash $ cat /etc/logrotate.d/php daily rotate 8 compress compresscmd /bin/bzip2 uncompresscmd /bin/bunzip2 compressoptions -9 compressext .bz2 missingok dateext dateformat -%Y%m%d-%s dateyesterday notifempty sharedscripts create 644 root adm /var/log/php/php-errors.log /var/log/php/*/php-errors.log /var/log/php/*/php-slow.log { postrotate if [ -d /run/systemd/system ]; then systemctl kill -s HUP rsyslog.service; else invoke-rc.d rsyslog rotate > /dev/null; fi end ```