Depuración (WP_DEBUG) y Log de errores en WordPress

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.

 
wp_debug wordpress-depurar wordrpress
 

Desde saber qué plugin está generando errores o comiéndose la memoria de nuestro servidor hosting, hasta averiguar qué plantillas WordPress están arrojando errores o tienen funciones deprecated, pasando por todos los errores fatales de PHP que puedan surgir (incluyendo errores referentes a una versión PHP desactualizada corriendo en nuestro hosting).

 
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:


 

 

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

herramienta generador wp-config
 

 

Controlando y Debuggeando los errores con plugins

 

Utilizando el plugin Debug Bar

Debug-bar-plugin-wordpress

 

El plugin Debug Bar Añade una opción “Debug” en la admin bar de WordPress:

debug-bar en admin bar
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: Debug-bar-opciones
 
*** 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:

Debug Bar Console-consultas sql
 

 

WP Log Viewer

 
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:

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

 

Si ya has activado y comprobado estas opciones estás más cerca de tener una instalación WordPress sana!

Utiliza el WP DEBUG de WordPress y DEPURA TU SITIO!