From b3324060f4da60d2f35b52a737c3941886586ae3 Mon Sep 17 00:00:00 2001 From: Ludovic Cartier Date: Tue, 9 Sep 2025 17:59:36 +0200 Subject: [PATCH] add php-fpm error logs --- docs/PHP/logs.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/PHP/logs.md diff --git a/docs/PHP/logs.md b/docs/PHP/logs.md new file mode 100644 index 0000000..18f1aa2 --- /dev/null +++ b/docs/PHP/logs.md @@ -0,0 +1,101 @@ +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 les **error_log** de PHP dans **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 +```