error_log par hôte virtuel?


113

Sur un serveur Linux exécutant Apache et PHP 5, nous avons plusieurs hôtes virtuels avec des fichiers journaux séparés. Nous ne pouvons pas sembler séparer le php error_logentre les hôtes virtuels.

Remplacer ce paramètre dans le <Location>de httpd.confne semble rien faire.

Existe-t-il un moyen d'avoir un php distinct error_logspour chaque hôte virtuel?

Réponses:


81

Pour définir le journal Apache ( pas le journal PHP ), le moyen le plus simple de le faire serait de faire:

<VirtualHost IP:Port>
   # Stuff,
   # More Stuff,
   ErrorLog /path/where/you/want/the/error.log
</VirtualHost>

S'il n'y a pas de "/" de début, il est supposé être relatif.

Page du journal des erreurs Apache


7
C'est le journal des erreurs Apache, qui est séparé du journal des erreurs PHP (voir les autres commentaires)
thelem

par rapport à quoi? le répertoire du httpd.confil est écrit, ou?
mb21

141

Si quelqu'un vient chercher, cela devrait ressembler à ceci:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/domains/example.com/html
    ErrorLog /var/www/domains/example.com/apache.error.log
    CustomLog /var/www/domains/example.com/apache.access.log common
    php_flag log_errors on
    php_flag display_errors on
    php_value error_reporting 2147483647
    php_value error_log /var/www/domains/example.com/php.error.log
</VirtualHost>

Ceci est pour le développement uniquement car il display_errorest activé. Vous remarquerez que le journal des erreurs Apache est distinct du journal des erreurs PHP. Les bonnes choses sont là php.error.log.

Jetez un œil ici pour la error_reportingclé http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


8
En fonction de votre configuration, vous devrez peut-être créer manuellement le fichier journal et définir le propriétaire / groupe sur le même utilisateur / groupe qu'utilise Apache. Apache ne vous avertira pas s'il ne peut pas écrire dans le fichier journal.
Ian Dunn

Notez que la valeur "error_reporting" change avec les nouvelles versions de PHP car elles ajoutent plus de niveaux d'erreur. E_ALL = "30719" maintenant.
ReactiveRaven

2
Étant donné que les valeurs "error_reporting" changent constamment et que vous ne pouvez pas utiliser de constantes PHP comme "E_ALL" et "E_STRICT" en dehors de php, voici comment vous assurez que vous avez toujours TOUTES les erreurs enregistrées: php_value error_reporting 2147483647
Buttle Butkus

Pourquoi voudriez-vous votre journal dans votre espace du domaine public?
AlxVallejo

1
Le fichier journal ne serait pas public. / html / est l'espace public.
Embrayage du

13

En général , je le préciser dans un .htaccessfichier ou le vhost.confsur le domaine que je travaille sur. Ajoutez ceci à l'un de ces fichiers:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"

1
Quelqu'un peut-il commenter la différence entre php_admin_valueet php_value?
Nick M

1
Ceci explique la différence: mattiasgeniar.be/2012/02/18
Jeremy

9

Le comportement par défaut pour error_log () est de sortir dans le journal des erreurs Apache. Si cela ne se produit pas, vérifiez vos paramètres php.ini pour la directive error_log. Laissez-le non défini pour utiliser le fichier journal Apache pour l'hôte virtuel actuel.


Je vérifierai. Je me demande simplement s'il est possible de toujours séparer le journal des erreurs apache et php lorsque nous voulons donner aux développeurs une chance de déboguer leur code sans leur donner le journal des erreurs apache qui pourrait contenir d'autres données sensibles.
Michael Stum

7

Ne définissez pas la error_logdestination de vos syslogcontenus eg /var/log/apache2, car les erreurs seront interceptées ErrorLog. Au lieu de cela, créez un subdirdans votre dossier de projet pour les journaux et faites php_value error_log "/path/to/project/logs". Cela vaut pour les .htaccess fichiers et les hôtes virtuels . Assurez - vous également que vous mettez php_flag log_errorssur


Intéressant. Ce comportement dépend-il du chemin du fichier error_log?
demonkoryu

6

Avez-vous essayé d'ajouter le php_value error_log '/path/to/php_error_logà votre configuration VirtualHost?


6

Oui, tu peux essayer,

php_value error_log "/var/log/php_log" 

dans .htaccessou vous pouvez faire en sorte que les utilisateurs utilisent ini_set()au début de leurs scripts s'ils souhaitent avoir une journalisation.

Une autre option serait d'activer par défaut les scripts php.inidans le dossier avec le script, puis d'aller dans le dossier racine de l'utilisateur / hôte, puis à la racine du serveur, ou quelque chose de similaire. Cela permettrait aux hôtes d'ajouter leurs propres php.inivaleurs et leurs propres error_logemplacements.


6
php_value error_log "/var/log/httpd/vhost_php_error_log"

Cela fonctionne pour moi, mais je dois changer l'autorisation du fichier journal.

ou Apache écrira le journal dans son fichier error_log.


5

Mon Apache avait quelque chose comme ça dans httpd.conf. Modifiez simplement les paramètres ErrorLog et CustomLog

<VirtualHost myvhost:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>

1
Nous parlons du journal PHP, pas du journal Apache ici.
demonkoryu

4

Tu peux essayer:

    <VirtualHost myvhost:80>
       php_value error_log "/var/log/httpd/vhost_php_error_log"
    </Virtual Host>

Mais je ne sais pas si cela fonctionnera. J'ai essayé sur mes sites sans succès.


2

Créez un hôte virtuel simple:

exemple de nom d'hôte: - thecontrolist.localhost

  1. C: \ Windows \ System32 \ drivers \ etc

    127.0.0.1 thecontrolist.localhost dans le fichier hosts

  2. C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf

    <VirtualHost *>
      ServerName thecontrolist.localhost
      ServerAlias thecontrolist.localhost
      DocumentRoot "/xampp/htdocs/thecontrolist"
      <Directory "/xampp/htdocs/thecontrolist">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
      </Directory>
    </VirtualHost>
    
  3. N'oubliez pas de redémarrer votre apache. pour plus, consultez ce lien

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.