errores - php logger
PHP CLI no registrará errores (6)
El comportamiento de registro / informe de PHP también depende de error_reporting.
Algunos marcos PHP (por ejemplo, CodeIgniter) ejecutan una error_reporting(E_STRICT)
o equivalente, cuando se encuentra en modo de producción, lo que reducirá drásticamente el número / tipo de errores registrados.
Si desea depurar algo, puede simplemente poner la siguiente declaración justo antes de su código:
error_reporting(E_ALL);
PHP actualmente no registrará los errores producidos desde la línea de comando.
Yo tengo :
log_errors = On
error_log = /var/log/php_errors.log
en /etc/php5/cli/php.ini
¿Me falta un ajuste adicional para que funcione?
Este hilo de preguntas y respuestas fue muy útil para mí al configurar el registro CLI de PHP en un entorno Ubuntu 12.04, así que quería publicar una respuesta que destile lo que aprendí. Además de la gran información proporcionada por David Chan
y George Cummins
, he creado una secuencia de comandos logrotate.d
para garantizar que el registro de errores CLI de PHP no se descontrole, así como configurarlo para que varios usuarios puedan registrar errores en el registro común de errores CLI de PHP.
En primer lugar, el comportamiento predeterminado de la CLI de PHP es registrar los mensajes de error en la salida estándar; el inicio de sesión en un archivo no es un comportamiento predeterminado. Lo que generalmente significa iniciar sesión en la misma sesión de terminal de línea de comandos que ejecuta el comando PHP CLI. Si bien el archivo PHP ini tiene adaptaciones para un error_log
específico, se deben realizar ajustes adicionales para que realmente funcione.
Primero, tuve que crear un archivo php_errors.log
inicial:
sudo touch /var/log/php_errors.log
Como el servidor en cuestión es utilizado por desarrolladores web que trabajan en varios proyectos, he configurado un grupo común para ellos llamado www-users
. Y en este caso, quiero que php_errors.log
sea legible y escribible por www-users
. Cambio la propiedad del archivo de esta manera:
sudo chown root:www-users /var/log/php_errors.log
Y luego cambie los permisos del archivo a esto:
sudo chmod 664 /var/log/php_errors.log
Sí, desde el punto de vista de seguridad, tener un archivo de registro legible y escribible por cualquiera en www-users
no es tan bueno. Pero este es un ambiente de trabajo compartido controlado. Así que confío en que los usuarios respeten cosas como esta. Y además, cuando PHP se ejecuta desde la CLI, cualquier usuario que pueda hacer eso necesitará acceso de escritura a los registros de todos modos para incluso obtener un registro escrito.
A continuación, vaya a /etc/php5/cli/php.ini
para ajustar la configuración predeterminada de Ubuntu 12.04 para que coincida con este nuevo archivo de registro:
sudo nano /etc/php5/cli/php.ini
Afortunadamente log_errors
está habilitado por defecto en Ubuntu 12.04:
log_errors = On
Pero para permitir el registro en un archivo, necesitamos cambiar el error_log
para que coincida con el nuevo archivo de esta manera:
error_log = /var/log/php_errors.log
Configure un script logrotate.d
.
Ahora debería ser, pero como no quiero que los registros se salgan de control, configuré un logrotate.d
para php_errors.log
. Crea un archivo llamado php-cli
en /etc/logrotate.d/
como este:
sudo nano /etc/logrotate.d/php-cli
Y coloque el contenido de este script rotate daemon script allí:
/var/log/php_errors.log {
weekly
missingok
rotate 13
compress
delaycompress
copytruncate
notifempty
create 664 root www-users
sharedscripts
}
Probando la configuración
Una vez hecho esto, probemos la configuración usando el consejo anterior de David Chan
:
php -r "error_log(''This is an error test that we hope works.'');"
Si eso se ejecutó correctamente, simplemente debería devolverse a un símbolo del sistema vacío ya que los errores CLI de PHP ya no se envían a la salida estándar. Así que compruebe el php_errors.log
real para el mensaje de error de prueba de esta manera:
tail -n 10 /var/log/php_errors.log
Y debe haber una línea de error con marcas de tiempo que se ve así:
[23-Jul-2014 16:04:56 UTC] This is an error test that we hope works.
Si no puede entender por qué o quizás no tiene permisos de usuario en php.ini, otra forma de eliminar errores de análisis de información es envolver su fuente de php en otra fuente de php con un cuerpo como:
ini_set(''display_errors'',1);
error_reporting(E_ALL);
include "mybustedfile.php";
Verifique que la cuenta de usuario que ejecuta PHP CLI tenga acceso de escritura a /var/log/php_errors.log
.
Además, puede verificar que está utilizando el archivo php.ini correcto como este:
php -a -c /etc/php5/cli/php.ini
como diagnóstico puede intentar forzar una escritura en el registro de errores de esta manera.
php -c /etc/php5/cli/php.ini -r " error_log(''test 123''); "
ahora debería ver la prueba 123 en su registro
tail /var/log/php_errors.log
en archivo PHP
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
en la terminal
tail -f /var/tmp/my-errors.log
salida Usted ensució!