¿Es posible cambiar la ubicación del archivo de registro para WP_DEBUG_LOG?
Uso WP_DEBUG_LOG en mi entorno de desarrollo y no tengo problemas con que debug.log esté en el directorio wp-content.
A veces activo WP_DEBUG en producción cuando necesito depurar algo, y todavía quiero usar el registro pero me gustaría redirigirlo a algún lugar fuera de mi directorio raíz web. ¿Es posible hacer esto usando WP_DEBUG_LOG?

Parece que la mayoría de las respuestas aquí ya no son válidas para la versión 5.1 de WP y superiores debido a este cambio: https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused-changes-in-5-1/
Ahora puedes definir WP_DEBUG_LOG
como una ruta en wp-config.php
si deseas sobrescribir la ubicación predeterminada wp-content/debug.log
, por ejemplo:
define( 'WP_DEBUG_LOG', 'wp-content/uploads/debug.log' );

Resulta que todo lo que hace WP_DEBUG_LOG es:
ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
Entonces, si deseas cambiar la ubicación del registro para WP_DEBUG_LOG en un plugin o tema, la respuesta de webaware es la mejor. Si solo quieres cambiarlo dentro de wp-config.php
, puedes reemplazar define( 'WP_DEBUG_LOG', true );
con las 2 líneas anteriores y cambiar el archivo de registro a donde prefieras.

Un par de años después, y no logro que el archivo se llene con errores a menos que esté en la carpeta de contenido de WordPress.

@MikeKormendy - podría ser un problema de permisos de directorio. La ubicación donde deseas escribir el archivo debe tener permisos de escritura para el usuario que es el propietario del proceso del ejecutor de PHP. En términos simples, asegúrate de que el destino del nuevo archivo tenga los mismos permisos que la carpeta wp-content actualmente tiene.

Los tiempos cambian, y también las respuestas correctas a las preguntas técnicas.
La respuesta actual a finales de 2019 es simple. Al definir la "constante" WP_DEBUG_LOG en wp-config.php, ahora puedes proporcionar una ruta donde quieres que se escriba el archivo.
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );
Consulta la Documentación de Soporte de WordPress

Sí, si agregas algún código a un plugin o al functions.php de un tema como este:
if (defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.txt' );
}
Edición: alguien más me presentó la necesidad de hacer esto, así que he incluido algo de código en un plugin simple que pueden editar; está disponible como un gist si alguien lo quiere.

Intenté agregar esto a mi archivo wp-config.php y no funciona. ¿Será porque wp-config.php se carga antes que el lugar real en el código donde se usa WP_DEBUG_LOG para definir el archivo de registro?

Pude hacer que esto funcione agregándolo en un mu-plugin. ¿Hay alguna manera de que pueda hacer este cambio solo dentro de wp-config? Supongo que tendría que establecer WP_DEBUG_LOG en false y reemplazar lo que hace yo mismo?

Esto funciona bien si puedes poner el código en un plugin o tema, ¡gracias!

Sí, simplemente guárdalo en un plugin sencillo. Consulta Cómo escribir un plugin en el codex.

Parece que el código de WordPress ha cambiado desde la última respuesta a esta pregunta. La función actual wp_debug_mode() relacionada con esas constantes incluye una prueba para verificar si WP_DEBUG_LOG equivale a true o 1 -- en cuyo caso se comporta como otros lo han descrito.
Sin embargo, también puedes establecer esa constante como una cadena -- la ruta de archivo que prefieras -- y el registro se guardará allí. Por ejemplo, puedes establecer una ruta fuera de tus directorios de contenido web accesible públicamente. Es posible que necesites ajustar los permisos de archivo para que funcione.
Yo busqué esta respuesta porque el plugin de seguridad WordFence está advirtiendo que mi registro de depuración podría ser accesible en /wp-content/
if ( in_array( strtolower( (string) WP_DEBUG_LOG ), array( 'true', '1' ), true ) ) {
$log_path = WP_CONTENT_DIR . '/debug.log';
} elseif ( is_string( WP_DEBUG_LOG ) ) {
$log_path = WP_DEBUG_LOG;
} else {
$log_path = false;
}

Por lo que sé, no puedes cambiar la ubicación del archivo de depuración predeterminado. Lo que sí puedes cambiar es la ubicación del registro de errores MU y la ubicación del archivo de registro de errores de PHP.
$ds = DIRECTORY_SEPARATOR;
# DEPURACIÓN
define( 'WP_DEBUG', true );
// archivo: ~/WP_CONTENT_DIR/debug.log
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'SAVEQUERIES', true );
# DEPURACIÓN: MU
define( 'DIEONDBERROR', true );
define( 'ERRORLOGFILE', WP_CONTENT_DIR.$ds.'logs'.$ds.'mu_error.log' );
@ini_set( 'log_errors', 'On' );
# Ubicación del registro de errores de PHP
@ini_set( 'error_log', WP_CONTENT_DIR.$ds.'logs'.$ds.'php_error.log' );

¿Entonces necesitaría desactivar WP_DEBUG_LOG para asegurarme de que el archivo debug.log nunca se cree en mi directorio wp-content?

Tuve este problema. Lo que hice fue agregar lo siguiente al wp-config:
define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', '/var/log/wp-debug.log' );
Luego cambiar el propietario de wordpress-debug.log:
chown -R www-data:www-data /var/log/wp-debug.log
Así que para mí era un problema de permisos. Usar chown para establecer los permisos del archivo al usuario/grupo de wordpress lo resolvió.
