error_log por host virtual?


113

En un servidor Linux que ejecuta Apache y PHP 5, tenemos varios hosts virtuales con archivos de registro separados. Parece que no podemos separar el php error_logentre hosts virtuales.

Anular esta configuración en el <Location>de httpd.confno parece hacer nada.

¿Hay alguna forma de tener php separado error_logspara cada host virtual?

Respuestas:


81

Para configurar el registro de Apache ( no el de PHP ), la forma más sencilla de hacerlo sería:

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

Si no hay "/" inicial, se asume que es relativo.

Página de registro de errores de Apache


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

relativo a que? el directorio del httpd.confque está escrito, o?
mb21

141

Si alguien viene a buscar, debería verse así:

<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 solo para desarrollo ya que display_errorestá activado. Notará que el registro de errores de Apache está separado del registro de errores de PHP. Lo bueno está en php.error.log.

Eche un vistazo aquí para obtener la error_reportingclave http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting


8
Dependiendo de su configuración, es posible que deba crear manualmente el archivo de registro y establecer el propietario / grupo en el mismo usuario / grupo que utiliza Apache. Apache no le advertirá si no puede escribir en el archivo de registro.
Ian Dunn

Tenga en cuenta que el valor "error_reporting" cambia con las nuevas versiones de PHP a medida que agregan más niveles de error. E_ALL = "30719" ahora mismo.
ReactiveRaven

2
Dado que los valores de "error_reporting" siguen cambiando y dado que no puede usar constantes PHP como "E_ALL" y "E_STRICT" fuera de php, así es como se asegura de tener siempre TODOS los errores registrados: php_value error_reporting 2147483647
Buttle Butkus

¿Por qué querrías tu registro en tu espacio de dominio público?
AlxVallejo

1
El archivo de registro no sería público. / html / es el espacio público.
Embrague

13

Por lo general basta con especificar esto en un .htaccessarchivo o la vhost.confen 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 sobre la diferencia entre php_admin_valuey php_value?
Nick M

1
Esto explica la diferencia: mattiasgeniar.be/2012/02/18/…
Jeremy

9

El comportamiento predeterminado de error_log () es enviar al registro de errores de Apache. Si esto no está sucediendo, verifique la 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.


Voy a ver. Me pregunto si es posible tener el registro de errores de apache y php por separado cuando queremos darles 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.
Michael Stum

7

No establezca error_logdónde syslogvan sus cosas eg /var/log/apache2, porque los errores serán interceptados por ErrorLog. En su lugar, cree un archivosubdir en la carpeta de su proyecto para los registros y hágalo php_value error_log "/path/to/project/logs". Esto se .htaccess aplica tanto a archivos como a vhosts . También asegúrese de que usted pone php_flag log_errorsen


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

6

¿Ha intentado agregar el php_value error_log '/path/to/php_error_loga su configuración de VirtualHost?


6

Si, puedes intentarlo

php_value error_log "/var/log/php_log" 

en .htaccesso puede hacer que los usuarios utilicen ini_set()al principio de sus scripts si quieren tener un registro.

Otra opción sería permitir que los scripts se establezcan de forma predeterminada php.inien la carpeta con el script, luego ir 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 php.inivalores y sus propias error_logubicaciones.


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

Me funciona, pero tengo que cambiar el permiso del archivo de registro.

o Apache escribirá el registro en its error_log.


5

Mi Apache tenía algo como esto en httpd.conf. Simplemente cambie la configuración de ErrorLog y 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
Estamos hablando del registro de PHP, no del registro de Apache aquí.
demonkoryu

4

Puedes probar:

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

Pero no estoy seguro de si va a funcionar. Probé en mis sitios sin éxito.


2

Crear VirtualHost simple:

ejemplo de nombre de host: - thecontrolist.localhost

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

    127.0.0.1 thecontrolist.localhost en el archivo de 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. No olvide reiniciar su apache. para más ver este enlace

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.