
Habilitación del modo de depuración WP_DEBUG y registro en archivo
WP_DEBUG es la herramienta nativa para identificar errores, avisos y deprecated notices en WordPress. En esta guía técnica y práctica explicaré cómo activar WP_DEBUG, redirigir los registros a un archivo (WP_DEBUG_LOG), configurar permisos seguros, interpretar los logs y aplicar buenas prácticas operativas para entornos de producción y desarrollo.
¿Qué hace WP_DEBUG y por qué es importante?
WP_DEBUG activa el modo de depuración en WordPress, lo que incrementa la visibilidad de errores PHP, avisos y prácticas obsoletas. Por sí solo muestra mensajes; combinado con WP_DEBUG_LOG y WP_DEBUG_DISPLAY permite capturar y controlar dónde van esos mensajes —en pantalla o a un archivo—. La depuración es esencial para:
- Detectar errores de plugins/temas y conflictos.
- Corregir llamadas a funciones obsoletas (deprecated).
- Reproducir y diagnosticar fallos en entornos controlados.
Cómo habilitar WP_DEBUG y registrar en archivo (paso a paso)
Los cambios se realizan en el archivo wp-config.php. Edita siempre con un usuario que pueda restaurar el archivo si algo sale mal (SFTP o SSH). Añade las siguientes líneas justo antes del comentario «/* That’s all, stop editing! Happy publishing. */»:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
Explicación rápida:
- WP_DEBUG: activa el modo debug global.
- WP_DEBUG_LOG: cuando es true crea o añade en
wp-content/debug.log. - WP_DEBUG_DISPLAY: false evita mostrar errores en pantalla (recomendado en producción).
- @ini_set(‘display_errors’, 0): refuerza la directiva PHP para no emitir errores en HTML.
Registrar en una ruta personalizada
Para entornos con separación de logs o cuando no deseas escribir en wp-content:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', '/var/log/wordpress/debug.log');
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);
Si usas una ruta personalizada, asegúrate de que el usuario del proceso web (www-data, nginx, apache) tenga permisos de escritura y que el directorio exista.
Permisos, propiedad y rotación de logs
Un error común es que debug.log no se crea por permisos. Recomendaciones operativas:
- Propietario: chown con el usuario del servidor web. Ejemplo:
chown www-data:www-data /var/log/wordpress -R. - Permisos: 0640 o 0600 sobre el archivo para evitar lectura pública. Ejemplo:
chmod 0640 /var/log/wordpress/debug.log. - Rotación: configura logrotate para evitar crecimiento infinito del archivo; rota diariamente o cuando supere un tamaño razonable.
Ejemplo mínimo de regla logrotate (/etc/logrotate.d/wordpress):
/var/log/wordpress/debug.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 www-data www-data
}
Ejemplos reales de uso y comandos útiles
Cómo monitorizar y filtrar el archivo de logs desde SSH:
- Ver en tiempo real:
tail -f /var/log/wordpress/debug.log - Buscar errores de un plugin:
grep -i "plugin-folder" /var/log/wordpress/debug.log - Exportar las últimas 200 líneas:
tail -n 200 /var/log/wordpress/debug.log > reporte.txt
Uso de error_log() en código propio para crear entradas explícitas (útil para probar):
error_log('Depuración: función mi_funcion() ejecutada con valores: '. print_r($args, true));
La función error_log (PHP) permite enviar mensajes directamente al sistema de logs o al archivo configurado.
Buenas prácticas de seguridad y operaciones
La depuración expone información sensible si se muestra en pantalla. Sigue estas reglas:
- Nunca dejes WP_DEBUG o WP_DEBUG_DISPLAY activos en producción mostrando errores públicamente.
- Utiliza
WP_DEBUG_LOGcon un archivo protegido y rotación configurada. - Registra solo mientras dure la investigación y revierte la configuración tras resolver el problema.
- Revisa logs y sanitiza cualquier dato sensible antes de compartirlos (p. ej. tokens, rutas internas).
Para riesgos de exposición y manejo seguro de información sensible, consulta las guías de seguridad de la comunidad en OWASP.
Depuración avanzada y alternativas
WP_DEBUG es excelente para PHP/WordPress, pero a veces necesitas herramientas adicionales:
- Plugins como Query Monitor para observar consultas SQL, hooks y tiempos en un entorno de desarrollo (no recomendado en producción).
- Uso de Xdebug para depuración paso a paso y perfiles de rendimiento.
- Logs del servidor web (Nginx/Apache) para complementar el analysis: errores 500, timeouts o problemas de proxy. Ver documentación en NGINX para configuración de logs y rendimiento.
- WP-CLI para ejecutar tests y comandos automáticos que generan logs reproducibles.
Ejemplo de flujo de depuración
- Habilitar WP_DEBUG y WP_DEBUG_LOG en un entorno staging.
- Reproducir error o flujo problemático.
- Obtener extracto con tail/grep, filtrar por timestamp/plugin/función.
- Corregir código, reutilizar
error_log()para validar entrada/salida de funciones. - Rotación y respaldo de logs para auditoría si el problema impactó producción.
Errores comunes y soluciones rápidas
- debug.log no se crea: revisar permisos y propietario del directorio, o usar una ruta absoluta y existente.
- Errores no se muestran ni en archivo: comprobar que PHP no tenga display_errors deshabilitado a nivel de php.ini y que las directivas no sean sobreescritas por .htaccess o configuración del servidor.
- Información sensible en logs: limpiar y rotar, revocar tokens o credenciales si fueron expuestos y regenerar claves.
Conclusión
WP_DEBUG y WP_DEBUG_LOG son herramientas fundamentales para cualquier desarrollador o administrador que gestione sitios WordPress. Activarlos correctamente, redirigir los registros a un archivo protegido, configurar permisos y rotación, y adoptar un flujo controlado de depuración minimiza riesgos y acelera la resolución de problemas. Complementa estas prácticas con herramientas de profiling y supervisión del servidor para obtener una visibilidad completa. Para llamadas específicas de logging y funciones de PHP consulta la documentación en PHP.net y para políticas de seguridad de información revisa OWASP. Mantén siempre la depuración desactivada en producción y documenta cambios en tu repositorio o runbook operativo.