El uso de la constante WP DEBUG y de los Logs y archivos de registro de errores para conseguir hacer un buen debugging (o depuración de errores) es fundamental en una instalación WordPress avanzada.
Por ejemplo, activando los logs de errores en wordpress, podremos averiguar si tenemos un consumo exagerado de memoria en nuestro servidor hosting. Este problema suele mostrarse en errores del estilo Out of memory allocated:
[25-Feb-2016 10:09:30 UTC] PHP Fatal error: Out of memory (allocated 24379392) (tried to allocate 3072 bytes) in /home/user/public_html/example.com/wp-content/plugins/wp-smushit/lib/class-wp-smush-admin.php on line 1111 |
Este problema de memoria suele conllevar el error 500 (Internal Server Error) o el de 503 Service Unavailable.
–> El error 500 suele deberse a un error de programación (un script o un archivo PHP que generan un loop..), a un error de permisos, a conexiones externas que no acaban de realizarse… Es más fácil que aparezca cuando nos quedamos sin recursos (CPU de nuestro server sobrecargada). También puede deberse a una línea errónea en el archivo .htaccess.
–> El error 503 quiere decir que nuestro servidor (o el espacio que tenemos reservado para nosotros en el hosting) está sobrecargado y hemos superado en alguna ocasión los recursos de servidor disponibles. Puede deberse a un pico de tráfico, a ataques recibidos que sobrecargan nuestro servidor …
Existen varias opciones para registrar los eventos de nuestro WordPress:
- Podemos hacerlo de forma manual, retocando el archivo wp-config.php y posteriormente revisando los archivos de error
- Controlar los logs por medio de plugins que nos ayudarán en el análisis.
Activando el archivo error_log en nuestro sitio WordPress (Control de errores con wp-config.php):
En el archivo wp-config.php
Justo antes de la linea:
/* ¡Eso es todo, deja de editar! Feliz blogging */
Debemos añadir lo siguiente:
ini_set('log_errors',TRUE); ini_set('error_reporting', E_ALL); ini_set('error_log', dirname(__FILE__) . '/error_logWP.txt'); #This will create an error_logWP.txt file in your site's root directory. Let's see what it includes. |
Esto creará un archivo llamado error_logWP.txt con un contenido interesante acerca de los errores y avisos de los archivos PHP de nuestra instalación WordPress:
Este archivo llamado error_logWP-txt mostrará por ejemplo:
[22-Mar-2016 02:15:20 UTC] PHP Fatal error: Call to a member function get() on a non-object in /home/user/public_html/midirectorio/wp-includes/cache.php on line 123 [22-Mar-2016 11:04:59 UTC] PHP Fatal error: Out of memory (allocated 23068672) (tried to allocate 122880 bytes) in /home/user/public_html/example.com/wp-includes/media.php on line 3102 [22-Mar-2016 11:25:27 UTC] PHP Fatal error: Out of memory (allocated 34340864) (tried to allocate 30720 bytes) in /home/user/public_html/example.com/wp-content/plugins/user-role-editor/includes/class-user-role-editor.php on line 585 [01-Apr-2016 08:32:03 UTC] PHP Fatal error: Out of memory (allocated 17039360) (tried to allocate 49152 bytes) in /home/user/public_html/example.com/wp-content/plugins/kiwi-logo-carousel/kiwi_logo_carousel_admin.php on line 287 |
Controlando los errores de depuración en WordPress (WP_DEBUG)
Otra forma de obtener información es activando el modo debug, lo haremos así:
Igualmente en el archivo wp-config.php
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); |
Esto creará el archivo wp-content/debug.log, con un contenido parecido a este:
[01-Apr-2016 18:59:13 UTC] PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/user/public_html/midirectorio/wp-includes/wp-db.php on line 1518
[01-Apr-2016 18:59:13 UTC] PHP Deprecated: Assigning the return value of new by reference is deprecated in /home/user/public_html/midirectorio/wp-content/plugins/db-cache-reloaded-fix/db-cache-reloaded.php on line 91
[01-Apr-2016 18:59:13 UTC] PHP Notice: Constant STYLESHEETPATH already defined in /home/user/public_html/midirectorio/wp-includes/default-constants.php on line 346
[01-Apr-2016 18:59:13 UTC] PHP Notice: ¡El llamado método constructor para WP_Widget es obsoleto desde la versión 4.3.0! Utiliza <pre>__construct() en su lugar. in /home/user/public_html/midirectorio/wp-includes/functions.php on line 3624 |
Generador online de wp-config
Los chicos de GenerateWP nos ofrecen una interesante herramienta que nos ayudará a generar algunas de las modificaciones en el wp-config que ya hemos comentado en este post: Generador de wp-config
Controlando y Debuggeando los errores con plugins
Utilizando el plugin Debug Bar
El plugin Debug Bar Añade una opción “Debug” en la admin bar de WordPress:
Dependiendo de la cantidad de Warnings y Notices que recibamos, el botón Debug se mostrará rojo o naranja.
Al pulsar el botón Debug, nos mostrará las consultas a la base de datos, la caché, y la versión de PHP:
*** Este plugin exige activar las opciones mencionadas anteriormente para registrar todos los errores y notificaciones, así como las consultas a la base de datos, la cantidad de ellas y la latencia en milisegundos.
* Recuerda activar en tu wp-config.php:
define('WP_DEBUG', false); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); define('SAVEQUERIES', true); |
La opción SAVEQUERIES la activaremos también porque con el siguiente plugin, que complementa a Debug Bar, es con el que podremos examinar las consultas a la base de datos:
Debug Bar Console
El plugin Debug Bar Console añade una consola PHP y SQL a la barra creada por el plugin anterior: DEBUG bar
Si activamos SAVEQUERIES, añadiendo en wp-config.php lo siguiente:
1 | define( 'SAVEQUERIES', true ); |
añadirá además el seguimiento de las consultas SQL y las mostrará por pantalla:
WP Log Viewer
El plugin Wp Log Viewer nos permite controlar la activación de debug desde el panel de WordPress.
Para ello debemos añadir algunas lineas en el wp-config, y crear un archivo de configuración para este plugin:
Hemos de crear el archivo wplv-config.php en el directorio raiz.
y en dicho archivo añadir lo siguiente:
<?php if (!defined('ABSPATH')) { header('HTTP/1.0 403 Forbidden'); die; } define('WPLV_DEBUG', false); |
En nuestro wp-config debemos añadir lo siguiente para incluir el archivo wplv-config.php:
include_once $_SERVER['DOCUMENT_ROOT'] . '/wplv-config.php'; |
El último paso es definir el estado de WP_DEBUG. Si ya lo habíamos definido previamente, lo que haremos es reemplazar el texto con el siguiente:
define('WP_DEBUG', defined('WPLV_DEBUG') ? WPLV_DEBUG : false); |
WP Log Viewer en funcionamiento:
Existen otros plugins que se complementan con Debug Bar y nos permiten visualizar las tareas Cron instaladas en nuestro WordPress. Es interesante comprobar la carga de las tareas CRON en nuestro servidor, y modificar o eliminar las que sea necesario. Lo veremos en la próxima entrada.
CONCLUSIONES:
Activando los plugins Debug Bar y Debug Bar Console, y activando las opciones WP_DEBUG, SAVEQUERIES, WP_DEBUG_LOG y WP_DEBUG_DISPLAY en wp-config.php, podremos depurar la carga de plugins, temas, scripts y otros archivos en un sitio web. Podremos examinar la memoria consumida y eliminar los plugins lentos o pesados que ralenticen o sobrecarguen la CPU de nuestro hosting.
Más info sobre Depuración de errores en WordPress.org