2011-03-18 5 views
24

He configurado php para registrar los errores y en mi máquina de desarrollo, que aparecen en los registros de errores de Apache como:¿Cómo llego PHP para registrar un StackTrace sobre el error fatal

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error: syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27 
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Stack trace: 
[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP 1. {main}() /Users/troelskn/Projects/test/public/index.php:0 

Sin embargo, en la producción de máquinas (Ubuntu) no hay stacktrace después del error y hay una referencia adjunta al mensaje. P.ej. se vería así:

[Thu Mar 17 18:22:07 2011] [error] [client ::1] PHP Parse error: syntax error, unexpected ')' in /Users/troelskn/Projects/test/bootstrap.inc.php on line 27, referer: http://localhost/ 

¿Cómo puedo controlar este formato? Me gustaría mucho tener la stacktrace disponible en los registros.

+5

Eche un vistazo en este http://stackoverflow.com/questions/3224809/is-there-a-php-ini-directive-that-enables-stack-traces-on-errors –

+0

@elzo Eres bastante a la derecha - el rastro proviene de xdebug de hecho. ¿Puedes hacer de esto una respuesta, así que puedo aceptarlo? – troelskn

+0

¿Puedes dar un enlace sobre cómo registrar las stacktraces de php en los registros de Apache? – side2k

Respuesta

16

Bueno, como ya se ha señalado, no se obtiene el mismo formato en la máquina en vivo porque la máquina en vivo no tiene instalado xdebug. Hay debug_backtrace pero eso no captaría un error fatal.

Puede instalar xdebug en el servidor activo, pero debe tener mucho cuidado de configurarlo para no exponer ninguna funcionalidad excepto el registro de seguimiento de pila. El uso incauto de xdebug en un Live Box podría suponer un riesgo de seguridad ya que las personas podrían iniciar una sesión de depuración remota, o sus mensajes de error mejorados podrían hacer eco inadvertidamente de los detalles internos de tu código.

Para ser honesto? Creo que su mejor opción es intentar y recrear las circunstancias bajo las cuales se produjo el error que el servidor en vivo registró en su servidor de prueba.

Editar para agregar: Se me olvidó mencionar que, además de ser un riesgo para la seguridad, XDebug también tendrá un impacto negativo en el rendimiento de su sitio web. Se conecta a Zend Engine de varias maneras cruciales para registrar el estado del programa y alterar su comportamiento (como anular la supresión de errores @), y esto tendrá un impacto inevitable en el rendimiento. Básicamente, es mucho mejor intentar replicar el problema en un entorno de prueba que agregar herramientas de depuración a una activa.

+0

Comentario adicional: XDEBUG con perfiles activados será muy desagradable para el rendimiento y también saturará el disco de su servidor. He visto un servidor colapsado con espacio de disco agotado (era una máquina virtual) porque un administrador descuidado lo activó. – pgr

Cuestiones relacionadas