2008-08-01 30 views
96

En un servidor Linux que ejecuta Apache y PHP 5, tenemos múltiples hosts virtuales con archivos de registro separados. Parece que no podemos separar el php error_log entre hosts virtuales.error_log por Virtual Host?

Anulando esta configuración en <Location> del httpd.conf parece que no hace nada.

¿Hay una manera de tener php error_logs separados para cada host virtual?

Respuesta

73

Para establecer el Apache (no el PHP) log, la manera más fácil de hacer esto sería hacer:

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

Si no hay ningún dirigente "/" que se supone que es relativo.

Apache Error Log Page

+6

Ese es el registro de errores de Apache, que está separado del registro de errores de PHP (ver otros comentarios) de registro de errores – thelem

+2

de PHP por defecto en el registro de errores de Apache. – helloandre

+0

en relación a qué? el directorio del 'httpd.conf' en el que está escrito, o? – mb21

8

El comportamiento por defecto es para error_log() a la salida en el registro de error Apache. Si esto no está sucediendo, verifique su configuración de php.ini para la directiva error_log - déjelo sin configurar para usar el archivo de registro de Apache para el vhost actual.

+0

Lo comprobaré. Me pregunto si aún es posible tener el registro de errores de apache y php por separado cuando queremos dar a los desarrolladores la oportunidad de depurar su código sin darles el registro de errores de apache que podría contener otros datos confidenciales. –

12

por lo general sólo se especifica esto en un archivo o .htaccess la vhost.conf en el dominio que estoy trabajando. Agregue esto a uno de estos archivos:

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

¿Alguien puede comentar la diferencia entre 'php_admin_value' y' php_value'? –

+1

Esto explica la diferencia: http://mattiasgeniar.be/2012/02/18/php-php_value-vs-php_admin_value-and-the-use-of-php_flag-explained/ – Jeremy

5

Mi Apache tenía algo como esto en httpd.conf. Sólo cambia la configuración ErrorLog y CustomLog

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

Estamos hablando del registro PHP, no el registro de Apache aquí. – demonkoryu

5

¿Ha intentado añadir la php_value error_log '/path/to/php_error_log a la configuración del host virtual?

3

Usted podría intentar:

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

pero no estoy seguro de si se va a trabajar. Probé en mis sitios sin éxito.

5

Sí, se puede tratar,

php_value error_log "/var/log/php_log" 

en .htaccess o puede hacer que los usuarios utilizan ini_set() en el comienzo de sus guiones, si quieren tener la tala.

Otra opción sería habilitar los scripts de forma predeterminada en el php.ini en la carpeta con el script, luego vaya a la carpeta raíz del usuario/host, luego a la raíz del servidor, o algo similar. Esto permitiría a los hosts agregar sus propios valores php.ini y sus propias ubicaciones error_log.

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

Funciona para mí, pero tengo que cambiar el permiso del archivo de registro.

o Apache escribirá el registro en el es error_log.

6

No establezca error_log en donde va syslog cosas, eg /var/log/apache2, porque los errores serán interceptados por ErrorLog.En su lugar, cree un subdir en su carpeta de proyecto para registros y haga php_valueerror_log "/path/to/project/logs". Esto se aplica a los archivos .htaccessy a los fantasmas. También asegúrese de poner php_flaglog_errors en

+0

Interesante. ¿Este comportamiento depende de la ruta del archivo error_log? – demonkoryu

131

Si alguien viene a buscar debe tener este aspecto:

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

Esto es para el desarrollo sólo desde display_error está encendido. Notará que el registro de errores de Apache está separado del registro de errores de PHP. Lo bueno está en php.error.log.

Echa un vistazo aquí para el error_reporting clave http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

+6

Dependiendo de su configuración, puede que necesite crear manualmente el archivo de registro y establecer el propietario/grupo al mismo usuario/grupo que Apache está utilizando. Apache no lo advertirá si no puede escribir en el archivo de registro. –

+0

Tenga en cuenta que el valor "error_reporting" cambia con las nuevas versiones de PHP, ya que agregan más niveles de error. E_ALL = "30719" en este momento. – ReactiveRaven

+2

Dado que los valores de "error_reporting" cambian constantemente y no se pueden usar constantes de PHP como "E_ALL" y "E_STRICT" fuera de php, así es como siempre se aseguran de tener TODOS los errores registrados: php_value error_reporting 2147483647 –

Cuestiones relacionadas