2008-08-01 10 views
96

Auf einem Linux-Server mit Apache und PHP 5 haben wir mehrere virtuelle Hosts mit separaten Protokolldateien. Wir können nicht scheinen, trennen Sie die PHP error_log zwischen virtuellen Hosts.error_log pro virtueller Host?

Das Überschreiben dieser Einstellung in der <Location> der httpd.conf scheint nichts zu tun.

Gibt es eine Möglichkeit, separate php error_logs für jeden virtuellen Host zu haben?

Antwort

73

Um die Apache (nicht die PHP) einzuloggen, die einfachste Art und Weise eingestellt, dies zu tun zu tun wäre:

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

Wenn es keine führende „/“ ist davon ausgegangen wird, dass relativ.

Apache Error Log Page

+6

Das ist das Apache-Fehlerprotokoll ist, das an das PHP-Fehlerprotokoll getrennt ist (siehe Kommentare) – thelem

+2

Fehlerprotokoll Fehlerprotokoll der Apache-Standardwerte-PHP. – helloandre

+0

relativ zu was? das Verzeichnis der 'httpd.conf' in dem es geschrieben ist, oder? – mb21

8

das Standardverhalten ist für error_log() an die Apache Fehlerprotokoll ausgegeben. Wenn dies nicht der Fall ist, überprüfen Sie Ihre php.ini-Einstellungen für die error_log -Direktive - lassen Sie sie frei, um die Apache-Protokolldatei für den aktuellen vhost zu verwenden.

+0

Ich werde überprüfen. Ich frage mich nur, ob es möglich ist, Apache und PHP Fehlerprotokoll noch getrennt zu haben, wenn wir den Entwicklern eine Chance geben wollen, ihren Code zu debuggen, ohne ihnen das Apache-Fehlerprotokoll zu geben, das andere sensible Daten enthalten könnte. –

12

ich geben Sie dies in der Regel nur in einer .htaccess Datei oder die vhost.conf auf der Domain arbeite ich an. Fügen Sie das zu einer dieser Dateien hinzu:

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

Kann jemand den Unterschied zwischen 'php_admin_value' und' php_value' kommentieren? –

+1

Dies erklärt den Unterschied: http://mattiasgeniar.be/2012/02/18/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/ – Jeremy

5

Mein Apache hatte so etwas in httpd.conf. Ändern Sie einfach die ErrorLog und CustomLog Einstellungen

<VirtualHost myvhost:80> 
    ServerAdmin [email protected] 
    DocumentRoot /opt/web 
    ServerName myvhost 
    ErrorLog logs/myvhost-error_log 
    CustomLog logs/myvhost-access_log common 
</VirtualHost> 
+0

Wir sprechen über das PHP-Protokoll, nicht die Apache log hier. – demonkoryu

5

Haben Sie versucht, die php_value error_log '/path/to/php_error_log zu Ihrer Virtualhost Konfiguration hinzufügen?

3

Sie könnten versuchen:

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

Aber ich bin nicht sicher, ob funktionieren wird. Ich habe meine Seiten ohne Erfolg versucht.

5

Ja, können Sie versuchen, können

php_value error_log "/var/log/php_log" 

in .htaccess oder Sie Benutzer am Anfang ihrer Skripte verwenden ini_set() haben, wenn sie die Protokollierung haben wollen.

Eine andere Option wäre, Skripte standardmäßig auf die php.ini im Ordner mit dem Skript zu aktivieren, dann gehen Sie zum Stammordner des Benutzers/Host, dann zum Root des Servers oder etwas ähnliches. Dies würde Hosts erlauben, ihre eigenen php.ini Werte und ihre eigenen error_log Standorte hinzuzufügen.

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

Es funktioniert für mich, aber ich muss die Berechtigung der Protokolldatei ändern.

oder Apache schreibt das Protokoll in seine .

6

Setzen Sie nicht error_log, wo Ihre syslog Sachen geht, eg /var/log/apache2, weil sie Fehler werden durch ErrorLog abgefangen erhalten.Erstellen Sie stattdessen einen subdir in Ihrem Projektordner für Protokolle, und tun Sie php_valueerror_log "/path/to/project/logs". Dies gilt für .htaccessDateien und VHosts. Stellen Sie außerdem sicher, dass Sie php_flag setzen log_errors auf

+0

Interessant. Ist dieses Verhalten abhängig vom Pfad der Datei error_log? – demonkoryu

131

Wenn jemand kommt suchen, um es so aussehen sollte:

<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> 

für die Entwicklung Dies ist erst seit display_error eingeschaltet ist. Sie werden feststellen, dass das Apache-Fehlerprotokoll vom PHP-Fehlerprotokoll getrennt ist. Das gute Zeug ist in php.error.log.

Werfen Sie einen Blick hier für die error_reporting Schlüssel http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

+6

Abhängig von Ihrer Konfiguration müssen Sie möglicherweise die Protokolldatei manuell erstellen und den Besitzer/die Gruppe auf den Benutzer/die Gruppe einstellen, die Apache verwendet. Apache warnt Sie nicht, wenn es nicht in die Protokolldatei schreiben kann. –

+0

Beachten Sie, dass sich der "error_reporting" -Wert mit neuen PHP-Versionen ändert, da sie mehr Fehlerlevel hinzufügen. E_ALL = "30719" gerade jetzt. – ReactiveRaven

+2

Da "error_reporting" -Werte sich ständig ändern und PHP-Konstanten wie "E_ALL" und "E_STRICT" nicht außerhalb von PHP verwendet werden können, stellen Sie sicher, dass immer ALLE Fehler protokolliert sind: php_value error_reporting 2147483647 –

Verwandte Themen