Forum Linux.général Logs PHP dans un fichier séparé par rapport à Apache

Posté par .
1
7
août
2012

Bonjour à tous,

Je possède depuis peu un Kimsufi 2G, et j'ai besoin d'un petit coup de main sur la configuration des erreurs de PHP.

Il y a longtemps, je me souviens que lorsque je faisais un error_log('message à envoyer dans les logs \n salut'); en PHP, cela allait directement dans un fichier "php.log" bien à part des logs d'Apache. De plus, le php.log prenait bien en compte les \n et compagnie, du coup j'avais un affichage des logs parfait !

J'essaye de reproduire cette configuration, mais pour l'instant, tout ce que j'ai réussi à avoir, c'est que les erreurs soient envoyées dans l'error.log d'Apache :

[Tue Aug 07 09:42:25 2012] [error] [client ....] message \xc3\xa0 envoyer dans les logs\n salut
Et comme vous le voyez, c'est très mal affiché...

Voici ma config, j'espère que vous saurez me dire ce qui cloche :

/etc/php5/apache2/php.ini (que les lignes qui peuvent vous intéresser) :

error_reporting = E_ALL
display_errors = On
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
track_errors = Off

La directive error_log est commentée.

Ensuite, voici mon VirtualHost :

<VirtualHost *:80>
        ServerName dev.test.fr
        DocumentRoot /var/www/
        ErrorLog ${APACHE_LOG_DIR}/dom/error.log
        CustomLog ${APACHE_LOG_DIR}/dom/access.log combined
        php_flag log_errors on
        php_flag display_errors on
        php_value error_reporting 30719
        php_value error_log /var/log/apache2/dom/php_errors.log
        #php_flag display_startup_errors off
        #php_flag display_errors on
        #php_flag html_errors off
        #php_flag  log_errors on
        #php_value error_log /var/log/apache2/dom/php.log
        #php_value error_reporting E_ALL

        <Directory /var/www/>
                DirectoryIndex index.php index.html
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

Et lorsque je génère une erreur :

<?php 
error_log("message à envoyer dans les logs\n salut"); 
?>

C'est le fichier error.log d'Apache qui prend l'erreur, et rien ne se passe dans le log de PHP, qui est vide d'ailleurs =/.

Error.log d'Apache :

[Tue Aug 07 09:56:31 2012] [error] [client ...] message \xc3\xa0 envoyer dans les logs\n salut

Pouvez-vous me dire ce qui coince ?

Merci d'avance

  • # Hey

    Posté par . Évalué à 3. Dernière modification le 07/08/12 à 14:12.

    http://php.net/manual/fr/function.error-log.php

    Tu peux préciser le fichier en argument de error_log()

    error_log("Grosse bourde !", 3, "/var/tmp/mes-erreurs.log");
    
    
    • [^] # Re: Hey

      Posté par . Évalué à 2.

      Effectivement, de cette façon ça marche bien, mais j'aurais aimé ne pas à le spécifier au moment du dev, mais directement via la config du serveur Web.

  • # Directive dans php.ini

    Posté par . Évalué à 3.

    ; Log errors to specified file. PHP's default behavior is to leave this value
    ; empty.
    ; http://php.net/error-log
    ; Example:
    error_log = /var/log/apache2/php.log
    
    

    Si vous n'aimez pas ce commentaire c'est qu'il est ironique.

    • [^] # Re: Directive dans php.ini

      Posté par . Évalué à 1.

      Je viens juste de renseigner cette directive, en laissant celle que j'ai présentée plus haut, et là, ce simple code :

      error_log("message à envoyer dans les logs\n salut");

      Me log cela dans l'error_log spécifié par Apache, c'est à dire ${APACHE_LOG_DIR}/dom/error.log et pas php.log =/.

      • [^] # Re: Directive dans php.ini

        Posté par . Évalué à 3.

        log_errors boolean

        Indique où les messages d'erreur générés doivent être écrits : dans l'historique du serveur ou dans error_log. Cette fonction est spécifique aux serveurs.

        Il faut peut-être mettre log_errors à Off ? Sinon je ne vois pas…

        • [^] # Re: Directive dans php.ini

          Posté par . Évalué à 1.

          Non, ça n'a rien changé :S.

          Rien à faire, j'ai essayé plusieurs configurations, pas moyen de préciser simplement dans Apache ou PHP.ini comment rediriger les logs de PHP…

  • # Et avec des quotes ?

    Posté par . Évalué à 1.

    En utilisant php_value error_log "/var/log/apache2/dom/php_errors.log" peut être ?

    Chris.

    • [^] # Re: Et avec des quotes ?

      Posté par . Évalué à 1.

      Non, ça ne change rien non plus…

      • [^] # Re: Et avec des quotes ?

        Posté par . Évalué à 1. Dernière modification le 07/08/12 à 15:36.

        Es tu sûr qu'il n'y a pas une directive ini_set qui prend le pas quelque-part dans le code ?
        Tu peux facilement tester en changeant php_value par php_admin_value…

        • [^] # Re: Et avec des quotes ?

          Posté par . Évalué à 1. Dernière modification le 07/08/12 à 15:40.

          Oui j'en suis sûr, c'est un simple fichier error.php avec une seule ligne, celle qui est présentée au dessus…

          Voilà ce que j'ai maintenant :

          ErrorLog ${APACHE_LOG_DIR}/benoit/lacoloc.fr/error.log
          CustomLog ${APACHE_LOG_DIR}/benoit/lacoloc.fr/access.log combined
          php_admin_flag log_errors on
          php_admin_flag display_errors on
          php_admin_value error_reporting 30719
          php_admin_value error_log /var/log/apache2/benoit/lacoloc.fr/php_errors.log
          
          

          J'ai testé avec et sans quotes, et ça ne fonctionne toujours pas :S. Rien à faire =/.

          • [^] # Re: Et avec des quotes ?

            Posté par . Évalué à 2.

            As-tu vérifié avec phpinfo() que tes directives sont bien prises en compte après redémarrage du serveur Web ?

            Si vous n'aimez pas ce commentaire c'est qu'il est ironique.

            • [^] # Re: Et avec des quotes ?

              Posté par . Évalué à 2.

              Et vérifie que le répertoire cible de ton fichier de log est bien accessible en écriture par ton serveur web qui fait tourner PHP

              Si vous n'aimez pas ce commentaire c'est qu'il est ironique.

            • [^] # Re: Et avec des quotes ?

              Posté par . Évalué à 0. Dernière modification le 07/08/12 à 16:03.

              Je viens de vérifier via phpinfo, et dans la colonne LocalValue, c'est bien défini !

              Pour ce qui est des droits, le log error d'Apache est dans le même dossier que celui de PHP, donc il a les droits, je viens de checker.

  • # Du neuf, mais ça ne marche toujours pas

    Posté par . Évalué à 0.

    Bon, j'ai un peu de neuf, j'ai le serveur d'un ami qui log bien, mais qui ne fait pas de distinction entre le fichier d'error d'Apache et celui de PHP.

    J'ai donc cela maintenant :

    display_errors Off
    error_log no value
    log_errors On

    Et dans le VirtualHost :

    ErrorLog "|/usr/bin/cronolog ${APACHE_LOG_DIR}/dom/error_log_%Y%m"
    <IfModule mod_log_config.c>
          CustomLog "|/usr/bin/cronolog ${APACHE_LOG_DIR}/dom/access_log_%Y%m" combinedio
    </IfModule>
    
    

    Il logue bien les erreurs, mais n'interprète toujours pas les "\n" :

    [Wed Aug 08 09:19:13 2012] [error] [client ...] message \xc3\xa0 envoyer dans les logs\n salut
    
    

    Alors que sur le serveur de mon ami, il prend bien en compte les retours chariots… Là, je comprends pas ce que j'ai de différent…

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.