logger log errores error_log error crear activar php error-logging error-log selinux

errores - php error_log no funciona



php logger (14)

Compruebe que PHP-FPM no está configurando explícitamente error_log :

Asegúrese de que el archivo /etc/php-fpm.d/www.conf no contenga la configuración de php_admin_value para error_log. Busque lo siguiente y coméntelos utilizando un punto y coma:

; NOTE: If these are set, ini_set(''error_log'', ''path'') will have no effect ; inside your php code, and this will be forced to be the value always. ; php_admin_value[error_log] = /var/log/php-fpm/www-error.log ; php_admin_flag[log_errors] = on

Luego reinicie php-fpm:

systemctl restart php-fpm

Verifique que los archivos .htaccess de Apache no están configurando el valor error_log usando

php_admin_value configuración de php_admin_value en los archivos de configuración de apache no se puede anular, así que asegúrese de no tener ningún php_admin_value para la configuración error_log en los archivos de configuración de Apache. También revisa la configuración de php_value por php_value acaso.

Sitio web de PHP - Cómo cambiar los ajustes de configuración

Esto se ha pedido 1000 veces y he examinado las diferentes publicaciones antes de publicar esto, pero no he encontrado una respuesta. Mientras he estado preparando PHP, esta siempre ha sido una pesadilla para trabajar. ¿Puede alguien decirme qué estoy haciendo mal aquí?

Tengo error_log configurado en el archivo ini junto con error_reporting = E_ALL | E_STRICT

¿Qué más me estoy perdiendo? Esto usualmente me lo dio. Quiero este conjunto en el archivo ini y no en mis scripts.

Otra cosa interesante que está sucediendo es que cuando intento intencionalmente lanzar un error en uno de mis scripts, Apache se reinicia una y otra vez.

Este es mi registro de eventos después de un error. Saquear en la marca de tiempo

Wed Nov 04 19:34:23 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:23 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:23 2009] [notice] Parent: Created child process 1700 [Wed Nov 04 19:34:23 2009] [notice] Child 1700: Child process is running [Wed Nov 04 19:34:23 2009] [notice] Child 3008: Released the start mutex [Wed Nov 04 19:34:23 2009] [notice] Child 1700: Acquired the start mutex. [Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting 64 worker threads. [Wed Nov 04 19:34:23 2009] [notice] Child 1700: Starting thread to listen on port 80. [Wed Nov 04 19:34:24 2009] [notice] Child 3008: All worker threads have exited. [Wed Nov 04 19:34:24 2009] [notice] Child 3008: Child process is exiting [Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting. [Wed Nov 04 19:34:53 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:53 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:53 2009] [notice] Parent: Created child process 3656 [Wed Nov 04 19:34:53 2009] [notice] Child 3656: Child process is running [Wed Nov 04 19:34:53 2009] [notice] Child 3656: Acquired the start mutex. [Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting 64 worker threads. [Wed Nov 04 19:34:53 2009] [notice] Child 3656: Starting thread to listen on port 80. [Wed Nov 04 19:34:53 2009] [notice] Parent: child process exited with status 128 -- Restarting. [Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 3980 [Wed Nov 04 19:34:54 2009] [notice] Child 3980: Child process is running [Wed Nov 04 19:34:54 2009] [notice] Child 3980: Acquired the start mutex. [Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting 64 worker threads. [Wed Nov 04 19:34:54 2009] [notice] Child 3980: Starting thread to listen on port 80. [Wed Nov 04 19:34:54 2009] [notice] Parent: child process exited with status 128 -- Restarting. [Wed Nov 04 19:34:54 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:54 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:54 2009] [notice] Parent: Created child process 1600 [Wed Nov 04 19:34:54 2009] [notice] Child 1600: Child process is running [Wed Nov 04 19:34:54 2009] [notice] Child 1600: Acquired the start mutex. [Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting 64 worker threads. [Wed Nov 04 19:34:54 2009] [notice] Child 1600: Starting thread to listen on port 80. [Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting. [Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 1068 [Wed Nov 04 19:34:55 2009] [notice] Child 1068: Child process is running [Wed Nov 04 19:34:55 2009] [notice] Child 1068: Acquired the start mutex. [Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting 64 worker threads. [Wed Nov 04 19:34:55 2009] [notice] Child 1068: Starting thread to listen on port 80. [Wed Nov 04 19:34:55 2009] [notice] Parent: child process exited with status 128 -- Restarting. [Wed Nov 04 19:34:55 2009] [notice] Apache/2.2.14 (Win32) PHP/5.3.0 configured -- resuming normal operations [Wed Nov 04 19:34:55 2009] [notice] Server built: Sep 28 2009 22:41:08 [Wed Nov 04 19:34:55 2009] [notice] Parent: Created child process 3220 [Wed Nov 04 19:34:56 2009] [notice] Child 3220: Child process is running [Wed Nov 04 19:34:56 2009] [notice] Child 3220: Acquired the start mutex. [Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting 64 worker threads. [Wed Nov 04 19:34:56 2009] [notice] Child 3220: Starting thread to listen on port 80.


Aquí está mi guía de solución de problemas para las llamadas error_log() no funcionan.

  1. Mire la configuración de su servidor para averiguar dónde está el archivo de registro de errores predeterminado.

    Esto depende del servidor que estés usando. Para comenzar, eche un vistazo a la opción ErrorLog de Apache si está usando la opción error_log Apache o Nginx si está usando Nginx. Asegúrese de que está establecido en un archivo. Si está utilizando una herramienta como Valet, tenga en cuenta que está utilizando software de servidor como Nginx detrás de escena.

  2. Compruebe los permisos del archivo de registro de errores de su servidor .

    En sistemas similares a Unix, debe poder escribirse por el usuario y grupo correctos, y los permisos del directorio principal y todos sus ancestros también deben ser correctos. Usa chmod y chown .

  3. Compruebe la configuración de PHP en los archivos .ini .

    Específicamente, compruebe log_errors = On y error_reporting = E_ALL | E_STRICT error_reporting = E_ALL | E_STRICT y error_log = /tmp/example/php_errors.log (consulte la documentación para los ajustes de configuración de log_errors , error_reporting y error_log ). Para encontrar el archivo .ini , mire la salida de phpinfo(); . Si error_log no está configurado, por defecto va al registro de errores del servidor, mencionado en los pasos anteriores. Si error_log se establece en un archivo, ya debería existir y ser escribible, como en los pasos anteriores. Recuerde reiniciar el servidor después de los cambios de configuración.

  4. Verifique que las configuraciones de PHP no estén siendo cambiadas por la configuración del servidor .

    La configuración de su servidor (incluso .htaccess ) puede cambiar los ajustes de configuración de PHP. En Apache, esto se hace usando php_admin_value y php_admin_flag ( docs ). Por ejemplo, puede encontrar en su archivo .htaccess esta línea: php_admin_flag[log_errors] = off . Recuerde reiniciar el servidor después de los cambios de configuración.

    En este punto, debería poder crear un archivo de prueba test.php con el contenido <?php error_log("test"); , reinicie su servidor y abra la URL en su navegador, y debería poder ver la test en su registro de errores (ya sea el servidor o el especificado por error_log = ). Pero sigue leyendo.

  5. Verifique que las configuraciones de PHP no se estén cambiando en tiempo de ejecución .

    La opción log_errors se puede cambiar en tiempo de ejecución ejecutando ini_set(''log_errors'', 1); , y también las otras opciones de configuración error_reporting y error_log . También tenga en cuenta que hay una función PHP especial de error_reporting() que cambia la configuración en tiempo de ejecución. Busque en su base de código cualquier invocación de ini_set o error_reporting . WordPress, por ejemplo, ejecuta estos dependiendo del valor de WP_DEBUG .

Otras cosas a tener en cuenta: Es posible que tenga problemas con los permisos en SELinux (consulte esta respuesta ).


Asegúrate y también establece

display_errors = On

Y prueba

error_reporting(E_ALL);

En su código. Muchas veces incluyo un script de configuración de error de tiempo de ejecución que activa los errores cuando estoy desarrollando, y los desactiva cuando no lo estoy. Se ve algo más o menos así:

if ($debugmode == ''on'') { error_reporting(E_ALL); ini_set("display_errors", 1); }else { error_reporting(0); ini_set("display_errors", 0); }

Espero que esto ayude.

** No leí eso correctamente, quieres registrar errores en lugar de mostrar, en ese caso, la respuesta de Chaos es lo que estás buscando.


Como dijo bradym, verifique si tiene permisos de escritura en el directorio donde se encuentra el registro de errores de PHP para el usuario de apache. Si creó un archivo de registro con permisos escritos, no es suficiente, el directorio también debería tenerlos.


El error_log = "C: / php / Log / error.log" tampoco me funcionaba. La solución para mí fue que usted no debería crear el error.log usted mismo, porque PHP lo hará por usted. Ver el tablero de mensajes de PHP. Estoy usando PHP 5.2 en un servidor Windows 2008


El problema que encontré fue que el registro de errores que había designado estaba protegido contra escritura. Todas las configuraciones de .htaccess eran correctas, PHP simplemente no podía escribir en el registro de errores porque no tenía permisos. Esto lo arregló para mí:

chmod 777 watermellon-app-errors.log

Obviamente, querrá cambiar el .log a cualquier archivo que esté usando para un registro.


En caso de que alguien más esté teniendo problemas para lograr que su entorno de desarrollo local registre errores, esto es lo que lo solucionó para mí:

En Windows, error_log debe establecer en la ruta completa al registro para que error_log() funcione ( error_log = c:/apache/php_errors.log ). Sin embargo, si error_log = php_errors.log sin ruta, php aún podrá registrar errores de inicio, como

PHP Startup: Unable to load dynamic library ''ext/php_mysqli.dll'' - The specified module could not be found


En mi caso, en un servidor de desarrollo CentOS, después de una yum update completa de yum update el permiso en / var / log / http se cambió a 700 y el usuario a ''root'', por lo que el usuario ''apache'' no pudo ingresar ni escribir en ello. Todavía podía escribir en el archivo existente /var/log/httpd/error.log pero no fue capaz de crear un nuevo archivo, ya que uso archivos de registro con sufijo de fecha. Emitiendo el comando

chown apache /var/log/httpd

resuelve el problema.


Esto hizo el truco para mí.

setsebool -P httpd_unified 1

Tenga en cuenta que este sería el método preferido a continuación para probar primero:

semanage fcontext -a -t httpd_sys_rw_content_t ''errorLogNameHere.error.log restorecon -v ''errorLogNameHere.error.log''

Esta respuesta se derivó de los registros de la ejecución de esta línea de comando:

journalctl -xe

Más información sobre el sistema que estaba ejecutando en: PHP 7.0 y CentOS 7

No estoy seguro de si no es obvio, pero el problema era la configuración de Apache para escribir archivos. Intenté chmod 777, chmod a + w en el directorio de registro, pero esto no funcionó para mí.

Espero que esto pueda ayudar a alguien.


La forma en que funciona en mi ubuntu (Apache 2.4.7, PHP 5.5.9) es la siguiente:

script de línea de comando:

  • escribe el registro en la ruta señalada por error_log si log_errors = On . Configuraciones en /etc/php5/cli/php.ini ;

Solicitud web vía apache:

  • Si log_errors = On ( /etc/php5/apache2/php.ini ), el error se agrega a la ruta señalada por la directiva de apache ErrorLog en el host virtual. Si esa directiva no existe, se usa la ruta php.ini error_log ;
  • si log_errors = Off no se escriben registros en ninguna parte;

Por lo que recuerdo, casi funcionó de esta manera en la mayoría de las pilas de Linux


No entiendo por qué , pero el registro de errores ahora está funcionando. Aquí esta lo que hice. Renuncié y comenté la directiva error_log y cerré el archivo ini. Ejecuté la secuencia de comandos con el error de análisis para ver si Apache aún se bloqueaba y obtuve el error de PHP en el archivo de registro. Esto es raro porque el archivo ini ya no tiene habilitado error_log y mi script no usa ini_set ().

¿Alguien tiene una explicación para esta locura? Además, Apache ya no se bloquea.


Si está utilizando Fedora, SELinux (habilitado de manera predeterminada) evitará que apache / httpd agregue errores a su archivo de registro, incluso cuando su archivo esté especificado en php.ini y su directorio contenga todos los permisos permitidos.

Puede ver si esto sucede mirando el archivo de registro del sistema en / var / log / messages

La solución ideal es configurar SELinux para permitir el acceso al archivo de registro.

La solución más rápida es deshabilitar SELinux en / etc / selinux / config configurando SELINUX en deshabilitado.

Deberá reiniciar su sistema después de hacer esto para que el cambio surta efecto.


Si se establece la directiva error_log, el archivo se usará para registrar errores de php, cuando no se establezca, los errores se registrarán en el registro de Apache. Eche un vistazo a http://us3.php.net/manual/en/errorfunc.configuration.php#ini.error-log .

El archivo error_log y el directorio en el que se encuentra deben poder ser escritos por el usuario con el que se ejecuta Apache. Si el archivo no se está creando, probablemente se deba a un problema de permisos.

No estoy seguro de por qué Apache se estrellaría contigo, pero supongo que es un problema de permisos de algún tipo.


También debe configurar log_errors = On en php.ini.