error_log pro virtuellem Host?

113

Auf einem Linux-Server mit Apache und PHP 5 verfügen wir über mehrere virtuelle Hosts mit separaten Protokolldateien. Wir können das PHP nicht error_logzwischen virtuellen Hosts trennen .

Diese Einstellung in den Aufschalten <Location>der httpd.confscheint nicht , etwas zu tun.

Gibt es eine Möglichkeit, error_logsfür jeden virtuellen Host ein separates PHP zu haben ?

Michael Stum
quelle

Antworten:

81

Um das Apache- Protokoll ( nicht das PHP- Protokoll) festzulegen, gehen Sie am einfachsten folgendermaßen vor:

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

Wenn es kein führendes "/" gibt, wird angenommen, dass es relativ ist.

Apache-Fehlerprotokollseite

halloandre
quelle
7
Das ist das Apache-Fehlerprotokoll, das vom PHP-Fehlerprotokoll getrennt ist (siehe andere Kommentare)
18.
relativ zu was? das Verzeichnis der httpd.confes geschrieben ist, oder?
mb21
141

Wenn jemand auf der Suche ist, sollte es so aussehen:

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

Dies ist nur für die Entwicklung, da eingeschaltet display_errorist. Sie werden feststellen, dass das Apache-Fehlerprotokoll vom PHP-Fehlerprotokoll getrennt ist. Das gute Zeug ist drin php.error.log.

Suchen Sie hier nach dem error_reportingSchlüssel http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

Kupplung
quelle
8
Abhängig von Ihrer Konfiguration müssen Sie möglicherweise die Protokolldatei manuell erstellen und den Eigentümer / die Gruppe auf denselben Benutzer / dieselbe Gruppe festlegen, den Apache verwendet. Apache warnt Sie nicht, wenn es nicht in die Protokolldatei schreiben kann.
Ian Dunn
Beachten Sie, dass sich der Wert "error_reporting" mit neuen Versionen von PHP ändert, wenn weitere Fehlerstufen hinzugefügt werden. E_ALL = "30719" im Moment.
ReactiveRaven
2
Da sich die Werte für "error_reporting" ständig ändern und Sie keine PHP-Konstanten wie "E_ALL" und "E_STRICT" außerhalb von PHP verwenden können, stellen Sie auf diese Weise sicher, dass immer ALLE Fehler protokolliert werden: php_value error_reporting 2147483647
Buttle Butkus
Warum sollten Sie Ihr Log in Ihrem gemeinfreien Bereich haben wollen?
AlxVallejo
1
Die Protokolldatei wäre nicht öffentlich. / html / ist der öffentliche Raum.
Kupplung
13

Ich geben in der Regel nur diese in einer .htaccessDatei oder die vhost.confauf der Domäne arbeite ich an. Fügen Sie dies einer dieser Dateien hinzu:

php_admin_value error_log "/var/www/vhosts/example.com/error_log"
Kevin
quelle
1
Kann jemand den Unterschied zwischen php_admin_valueund kommentieren php_value?
Nick M
1
Dies erklärt den Unterschied: mattiasgeniar.be/2012/02/18/…
Jeremy
9

Das Standardverhalten für error_log () ist die Ausgabe in das Apache-Fehlerprotokoll. Wenn dies nicht geschieht, überprüfen Sie Ihre php.ini-Einstellungen auf die Anweisung error_log. Lassen Sie es deaktiviert, um die Apache-Protokolldatei für den aktuellen vhost zu verwenden.

Matte
quelle
Ich werde überprüfen. Ich frage mich nur, ob es möglich ist, Apache- und PHP-Fehlerprotokoll immer noch getrennt zu haben, wenn wir Entwicklern die Möglichkeit geben möchten, ihren Code zu debuggen, ohne ihnen das Apache-Fehlerprotokoll zu geben, das möglicherweise andere vertrauliche Daten enthält.
Michael Stum
7

Stellen Sie nicht ein error_log, wohin Ihre syslogSachen gehen eg /var/log/apache2, da diese Fehler abgefangen werden ErrorLog. Erstellen subdirSie stattdessen einen in Ihrem Projektordner für Protokolle und tun Sie dies php_value error_log "/path/to/project/logs". Dies gilt sowohl für .htaccess Dateien als auch für vhosts . Stellen Sie außerdem sicher stellen Sie php_flag log_errorsauf

rkulla
quelle
Interessant. Hängt dieses Verhalten vom Pfad der Datei error_log ab?
Demonkoryu
6

Haben Sie versucht, das php_value error_log '/path/to/php_error_logzu Ihrer VirtualHost-Konfiguration hinzuzufügen ?

Hoyhoy
quelle
6

Ja, du kannst es versuchen,

php_value error_log "/var/log/php_log" 

in .htaccessoder Sie können Benutzer ini_set()am Anfang ihrer Skripte verwenden lassen, wenn sie eine Protokollierung wünschen.

Eine andere Option wäre, Skripte so zu aktivieren, dass sie standardmäßig php.iniim Ordner mit dem Skript verwendet werden, und dann zum Stammordner des Benutzers / Hosts, dann zum Stammverzeichnis des Servers oder ähnlichem zu wechseln. Dies würde es Hosts ermöglichen, ihre eigenen php.iniWerte und ihre eigenen error_logStandorte hinzuzufügen .

James Hartig
quelle
6
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 das its error_log.

Sangjin
quelle
5

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

<VirtualHost myvhost:80>
    ServerAdmin [email protected]
    DocumentRoot /opt/web
    ServerName myvhost
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log common
</VirtualHost>
Ejunker
quelle
1
Wir sprechen hier über das PHP-Protokoll, nicht über das Apache-Protokoll.
Demonkoryu
4

Du kannst es versuchen:

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

Aber ich bin mir nicht sicher, ob es funktionieren wird. Ich habe meine Websites ohne Erfolg ausprobiert.

Robinho
quelle
2

Einfachen VirtualHost erstellen:

Beispiel Hostname: - thecontrolist.localhost

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

    127.0.0.1 thecontrolist.localhost in der Hosts-Datei

  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. Vergessen Sie nicht, Ihren Apache neu zu starten. Weitere Informationen finden Sie unter diesem Link

Parveen Chauhan
quelle