2.6 KiB
2.6 KiB
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 :
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:
# 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 :
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 :
# 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:
- on configure les error_log de PHP dans syslog
- on spécifique le syslog_ident du pool FPM
- 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:
# 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:
$ 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