Files
wiki/docs/PHP/logs.md
Ludovic Cartier df83c58104
All checks were successful
mkdocs build / build (push) Successful in 5s
mkdocs build / notification (push) Successful in 2s
php logs - fixes
2025-09-09 18:03:48 +02:00

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:

  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:

# 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