Newline dans logs php

Bonjour,

les logs php ne montrent pas sauts de ligne. Exemple:

[Wed Sep 18 09:12:17.672136 2019] [proxy_fcgi:error] [pid 18955] [client 127.0.0.1:43810] AH01071: Got error 'PHP message: PHP Warning:  file_put_contents(/var/www/lef/logs/everything.php): failed to open stream: Permission denied in /home/www/lef/libraries/joomla/filesystem/file.php on line 501PHP message: PHP Stack trace:PHP message: PHP   1. PlgSystemRedirect::handleException() /home/www/lef/plugins/system/redirect/redirect.php:0PHP message: PHP   2. PlgSystemRedirect::doErrorHandling() /home/www/lef/plugins/system/redirect/redirect.php:91PHP message: PHP   3. Joomla\\CMS\\Exception\\ExceptionHandler::render() /home/www/lef/plugins/system/redirect/redirect.php:112PHP message: PHP   4. Joomla\\CMS\\Log\\Log::add() /home/www/lef/libraries/src/Exception/ExceptionHandler.php:50PHP message: PHP   5. Joomla\\CMS\\Log\\Log->addLogEntry() /home/www/lef/libraries/src/Log/Log.php:166PHP message: PHP   6. Joomla\\CMS\\Log\\Logger\\FormattedtextLogger->addEntry() /home/www/lef/libraries/src/Log/Log.php:320PHP message: PHP   7. JFile::append() /home/www/lef/libraries/src/Log/Logger/FormattedtextLogger.php:157PHP message: PHP   8. file_put_contents() /home/www/lef/libraries/joomla/filesystem/file.php:501'

J’ai pourtant défini le fichier de log dans php.ini et ouvert le fichier en écriture:

root@kmcs:/home/kmc# grep apache2/error.log /etc/php/7.3/fpm/php.ini 
error_log = /var/log/apache2/error.log
root@kmcs:/home/kmc# ls -l /var/log/apache2/error.log 
-rwxrwxrwx 1 root adm 119728 sept. 18 09:24 /var/log/apache2/error.log

Toute suggestion bienvenue

C’est bien ce que tu obtiens avec cat /var/log/apache2/error.log, tu n’utilises pas autre chose pour regarder le log ?

effectivement j’utilise

tail error.log | sed -ue 's/\\n/\n/g'

mais ça n’a pas l’effet escompté

Ben donc c’est juste ta regexp qui bouffe les fins de lignes, non ?

Voici l’affichage sans le filtr regexp:

kmc@kmcs:~$ sudo tail -f /var/log/apache2/error.log
[Mon Sep 23 01:51:15.916363 2019] [:error] [pid 814] python_init: Python version mismatch, expected '2.7.5+', found '2.7.16'.
[Mon Sep 23 01:51:15.924216 2019] [:error] [pid 814] python_init: Python executable found '/usr/bin/python'.
[Mon Sep 23 01:51:15.924247 2019] [:error] [pid 814] python_init: Python path being used '/usr/lib/python2.7:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload'.
[Mon Sep 23 01:51:15.924271 2019] [:notice] [pid 814] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads.
...
[Mon Sep 23 09:09:21.222651 2019] [proxy_fcgi:error] [pid 875] [client 127.0.0.1:49612] AH01071: Got error 'PHP message: PHP Warning:  session_start(): Failed to read session data: user (path: /var/lib/php/sessions) in /home/www/lef/libraries/joomla/session/handler/native.php on line 260PHP message: PHP Stack trace:PHP message: PHP   1. {main}() /home/www/lef/administrator/index.php:0PHP message: PHP   2. Joomla\\CMS\\Factory::getApplication() /home/www/lef/administrator/index.php:48PHP message: PHP   3. Joomla\\CMS\\Application\\CMSApplication::getInstance() /home/www/lef/libraries/src/Factory.php:140PHP message: PHP   4. Joomla\\CMS\\Application\\AdministratorApplication->__construct() /home/www/lef/libraries/src/Application/CMSApplication.php:343PHP message: PHP   5. Joomla\\CMS\\Application\\AdministratorApplication->__construct() /home/www/lef/libraries/src/Application/AdministratorApplication.php:48PHP message: PHP   6. Joomla\\CMS\\Application\\AdministratorApplication->loadSession() /home/www/lef/libraries/src/Application/CMSApplication.php:134PHP message: PHP   7. Joomla\\CMS\\Session\\Session->isNew() /home/www/lef/libraries/src/Application/CMSApplication.php:755PHP message: PHP   8. Joomla\\CMS\\Session\\Session->get() /home/www/lef/libraries/src/Session/Session.php:455PHP message: PHP   9. Joomla\\CMS\\Session\\Session->start() /home/www/lef/libraries/src/Session/Session.php:498PHP message: PHP  10. Joomla\\CMS\\Session\\Session->_start() /home/www/lef/libraries/src/Session/Session.php:620PHP message: PHP  11. JSessionHandlerJoomla->start() /home/www/lef/libraries/src/Session/Session.php:660PHP message: PHP  12. JSessionHandlerJoomla->start() /home/www/lef/libraries/joomla/session/handler/joomla.php:88PHP message: PHP  13. JSessionHandlerJoomla->doSessionStart() /home/www/lef/libraries/joomla/session/handler/native.php:50PHP message: PHP  14. session_start() /home/www/lef/libraries/joomla/session/handler/native.php:260'

C’est cool.
Et donc quel est le problème ?

Pas de sauts de ligne. Regarde bien ```
[Mon Sep 23 09:09:21.222651 2019]…

Non, mais je sais lire.
C’est juste:
OK, tu as une regexp qui bouffent les fins de ligne quand tu l’appliques à ton log, et alors ?
Ton fichier de log, lui, a les bonnes fins de lignes, rien à dire de ce coté.
Bref, je ne vois pas quelle est ta question.

Pas de regexp dans mon dernier extrait de listing et aucun retour à la ligne dans celle ci qui devrait en faire au moins 15 (lignes) et n’en fait qu’une:

[Mon Sep 23 09:09:21.222651 2019] [proxy_fcgi:error] [pid 875] [client 127.0.0.1:49612] AH01071: Got error 'PHP message: PHP Warning:  session_start(): Failed to read session data: user (path: /var/lib/php/sessions) in /home/www/lef/libraries/joomla/session/handler/native.php on line 260PHP message: PHP Stack trace:PHP message: PHP   1. {main}() /home/www/lef/administrator/index.php:0PHP message: PHP   2. Joomla\\CMS\\Factory::getApplication() /home/www/lef/administrator/index.php:48PHP message: PHP   3. Joomla\\CMS\\Application\\CMSApplication::getInstance() /home/www/lef/libraries/src/Factory.php:140PHP message: PHP   4. Joomla\\CMS\\Application\\AdministratorApplication->__construct() /home/www/lef/libraries/src/Application/CMSApplication.php:343PHP message: PHP   5. Joomla\\CMS\\Application\\AdministratorApplication->__construct() /home/www/lef/libraries/src/Application/AdministratorApplication.php:48PHP message: PHP   6. Joomla\\CMS\\Application\\AdministratorApplication->loadSession() /home/www/lef/libraries/src/Application/CMSApplication.php:134PHP message: PHP   7. Joomla\\CMS\\Session\\Session->isNew() /home/www/lef/libraries/src/Application/CMSApplication.php:755PHP message: PHP   8. Joomla\\CMS\\Session\\Session->get() /home/www/lef/libraries/src/Session/Session.php:455PHP message: PHP   9. Joomla\\CMS\\Session\\Session->start() /home/www/lef/libraries/src/Session/Session.php:498PHP message: PHP  10. Joomla\\CMS\\Session\\Session->_start() /home/www/lef/libraries/src/Session/Session.php:620PHP message: PHP  11. JSessionHandlerJoomla->start() /home/www/lef/libraries/src/Session/Session.php:660PHP message: PHP  12. JSessionHandlerJoomla->start() /home/www/lef/libraries/joomla/session/handler/joomla.php:88PHP message: PHP  13. JSessionHandlerJoomla->doSessionStart() /home/www/lef/libraries/joomla/session/handler/native.php:50PHP message: PHP  14. session_start() /home/www/lef/libraries/joomla/session/handler/native.php:260'

Il n’y a rein d’anormal à cela. C’est le journal des erreurs d’Apache, si une requête provoque une erreur à un instant, l’ensemble du message d’erreur est sur la même ligne.
Dans ton cas cette ligne est très longue puisque PHP est apparemment configuré pour afficher toutes les erreurs ( PHP Stack trace …).

Qui était donc le log brut où on voyait trés bien un retour à la fin de chaque ligne de log, donc correct.

Non, elle ne devrait pas faire 15 lignes.
Elle constitue une seule ligne de log même si elle est trés longue.
Elle contient une trace de pile d’un script php/joomla, qui est (et c’est normal) regroupé sur une seule ligne de log.

Juste après “native.php on line 260” manque le premier saut de ligne qui devrait avoir lieu également après chaque élément de la pile du script PHP

Non.
C’est toi qui veut qu’il y ai des retours chariots, pas la logique du système.
Pour les logs et les trace de php, ça n’a pas à être formaté autrement dans le log que sur une seule ligne, c’est juste comme ça que ça doit sortir.
Le format de ce que tu constates est normal et ne contient aucune “erreur”.

Aprés, si ce formatage ne te plait pas, tu peux analyser le log et le présenter autrement, mais c’est autre chose.

Ce problème ne date pas d’hier et on peut voir de nombreux posts à ce sujet dont en voici un:

C’est pourquoi j’avais précisé au début de ce post avoir défini error_log dans le php.ini et utilisé les regexp pour tenter de faire apparaitre les sauts de ligne.

Les regexep ne fonctionnant pas. Comment faire apparaitre les sauts de ligne qui, je le maintiens, existent dans le log PHP normalement ?

Ou bien comment empêcher les logs d’apache de passer par syslog ?

Justement ce ne sont pas les logs de PHP mais ceux d’Apache et le lien que tu donnes fait la même confusion que toi.
Les regexp fonctionnent il faut juste que tu trouves un motif à remplacer par des saut de lignes, par exemple (vite fait, mal fait) :
sed -e 's/ \/\n\t/g'

1 J'aime