error_log per host virtuale?


113

Su un server Linux che esegue Apache e PHP 5, abbiamo più host virtuali con file di registro separati. Non riusciamo a separare il file phperror_log tra host virtuali.

Ignorando questa impostazione nel <Location>dihttpd.conf non sembra fare nulla.

C'è un modo per avere php separato error_logsper ogni host virtuale?

Risposte:


81

Per impostare il registro di Apache ( non PHP ), il modo più semplice per farlo sarebbe:

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

Se non ci sono "/" iniziali, si presume che sia relativo.

Pagina del registro degli errori di Apache


7
Questo è il log degli errori di Apache, che è separato dal log degli errori PHP (vedi altri commenti)
thelem

rispetto a cosa? la directory in httpd.confcui è scritto, o?
mb21

141

Se qualcuno viene a guardare, dovrebbe apparire così:

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

Questo è solo per lo sviluppo poiché display_errorè attivato. Noterai che il log degli errori di Apache è separato dal log degli errori PHP. La roba buona è dentro php.error.log.

Dai un'occhiata qui per la error_reportingchiave http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


8
A seconda della configurazione, potrebbe essere necessario creare manualmente il file di registro e impostare il proprietario / gruppo sullo stesso utente / gruppo utilizzato da Apache. Apache non ti avviserà se non riesce a scrivere nel file di registro.
Ian Dunn

Nota che il valore "error_reporting" cambia con le nuove versioni di PHP man mano che aggiungono più livelli di errore. E_ALL = "30719" adesso.
ReactiveRaven

2
Poiché i valori di "error_reporting" continuano a cambiare e poiché non è possibile utilizzare costanti PHP come "E_ALL" e "E_STRICT" al di fuori di php, questo è il modo in cui ti assicuri di avere sempre TUTTI gli errori registrati: php_value error_reporting 2147483647
Buttle Butkus

Perché vorresti che il tuo log nel tuo spazio di dominio pubblico?
AlxVallejo

1
Il file di registro non sarebbe pubblico. / html / è lo spazio pubblico.
Frizione

13

Io di solito basta specificare questo in un .htaccessfile di o lavhost.conf sul dominio su cui sto lavorando. Aggiungilo a uno di questi file:

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

1
Qualcuno può commentare la differenza tra php_admin_valuee php_value?
Nick M

1
Questo spiega la differenza: mattiasgeniar.be/2012/02/18/…
Jeremy

9

Il comportamento predefinito per error_log () è l'output nel log degli errori di Apache. Se ciò non accade, controlla le impostazioni di php.ini per la direttiva error_log. Lascialo non impostato per utilizzare il file di registro di Apache per il vhost corrente.


Controllerò. Mi chiedo solo se sia possibile avere ancora il log degli errori di apache e php separati quando vogliamo dare agli sviluppatori la possibilità di eseguire il debug del loro codice senza fornire loro il log degli errori di apache che potrebbe contenere altri dati sensibili.
Michael Stum

7

Non impostare error_logdove syslogvanno le tue cose eg /var/log/apache2, perché gli errori verranno intercettati ErrorLog. Invece, crea un file subdirnella cartella del tuo progetto per i log e fai php_value error_log "/path/to/project/logs". Questo vale sia per i .htaccess file che per i vhost . Inoltre assicuratevi di mettere php_flag log_errorssu


Interessante. Questo comportamento dipende dal percorso del file error_log?
demonkoryu

6

Hai provato ad aggiungere il php_value error_log '/path/to/php_error_logalla tua configurazione VirtualHost?


6

Sì, puoi provare

php_value error_log "/var/log/php_log" 

in .htaccessoppure puoi fare in modo che gli utenti usino ini_set()all'inizio dei loro script se vogliono avere la registrazione.

Un'altra opzione potrebbe essere quella di abilitare gli script per impostazione predefinita php.ininella cartella con lo script, quindi andare alla cartella principale dell'utente / host, quindi alla radice del server o qualcosa di simile. Ciò consentirebbe agli host di aggiungere i propri php.inivalori e le proprie error_logposizioni.


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

Per me funziona, ma devo modificare l'autorizzazione del file di registro.

oppure Apache scriverà il log nella sua error_log.


5

Il mio Apache aveva qualcosa di simile in httpd.conf. Basta modificare le impostazioni ErrorLog e 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
Stiamo parlando del registro PHP, non del registro di Apache qui.
demonkoryu

4

Puoi provare:

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

Ma non sono sicuro che funzionerà. Ho provato sui miei siti senza successo.


2

Crea VirtualHost semplice:

nome host di esempio: - thecontrolist.localhost

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

    127.0.0.1 thecontrolist.localhost nel file hosts

  2. C: \ xampp \ apache \ conf \ aggiuntivo \ 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. Non dimenticare di riavviare il tuo apache. per maggiori informazioni controlla questo link

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.