¿Es posible cambiar la ubicación del archivo de registro para WP_DEBUG_LOG?

18

Uso WP_DEBUG_LOG en mi entorno de desarrollo y no tengo problemas con debug.log en el directorio wp-content.

A veces enciendo WP_DEBUG en producción cuando necesito depurar algo, y todavía quiero usar el registro pero me gustaría redirigirlo a algo fuera de mi raíz web. ¿Es esto posible usando WP_DEBUG_LOG?

jjeaton
fuente

Respuestas:

19

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 desea cambiar la ubicación del registro para WP_DEBUG_LOG en un complemento o tema, la respuesta de webaware es la mejor. Si solo desea cambiarlo dentro wp-config.php, puede reemplazarlo define( 'WP_DEBUG_LOG', true );con las 2 líneas anteriores y cambiar el archivo de registro a donde desee.

jjeaton
fuente
Un par de años después, y parece que no puedo hacer que el archivo se llene de errores a menos que esté en la carpeta de contenido de WordPress.
Mike Kormendy
@MikeKormendy: podría ser un problema de permisos de directorio. La ubicación donde desea escribir el archivo debe ser editable por el usuario que es el propietario del proceso para el corredor php. En términos simples, asegúrese de que el nuevo destino del archivo tenga los mismos permisos que tiene actualmente la carpeta wp-content.
Michael Teter
4

Sí, si agrega algún código a un complemento o a las funciones de un tema .php así:

if (defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
    ini_set( 'error_log', WP_CONTENT_DIR . '/debug.txt' );
}

Editar: alguien más me acaba de presentar la necesidad de hacer esto, por lo que agregué un código en un complemento simple que pueden editar; está disponible como una esencia si alguien lo quiere.

webaware
fuente
Intenté agregar esto a mi archivo wp-config.php y no funciona. ¿Es porque wp-config.php quizás se cargue antes del lugar real en el código donde se usa WP_DEBUG_LOG para definir el archivo de registro?
jjeaton
1
Pude hacer que esto funcione al agregarlo a un plugin mu. ¿Hay alguna forma de hacer este cambio dentro de wp-config? ¿Asumo que solo tendría que configurar WP_DEBUG_LOG en falso y reemplazar lo que hago yo mismo?
jjeaton
1
Esto funciona bien si puede poner el código en un complemento o tema, ¡gracias!
jjeaton
Sí, simplemente volcarlo en un complemento simple. Consulte Escribir un complemento en el códice.
webaware
1

Parece que el código de WordPress ha cambiado desde que se publicó la última respuesta a esta pregunta. La función actual wp_debug_mode () relacionada con esas constantes incluye una prueba de si WP_DEBUG_LOG equivale a verdadero o 1, en cuyo caso se comporta como otros lo han descrito.

Sin embargo, también puede establecer esa constante en una cadena, su ruta de archivo preferida, y el registro se generará allí. Por ejemplo, puede establecerlo en una ruta fuera de sus directorios para contenido web de acceso público. Es posible que tenga que jugar con permisos de archivo para que eso funcione.

Vine buscando esta respuesta porque el complemento de seguridad de WordFence se queja de que mi registro de depuración es potencialmente 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; }

David F. Carr
fuente
0

Afaik, no puede cambiar la ubicación del archivo de depuración predeterminado. Lo que puede cambiar es la ubicación del registro de errores de MU, así como la ubicación del archivo de registro de errores de PHP.

$ds = DIRECTORY_SEPARATOR;
# DEBUG
define( 'WP_DEBUG',               true );
// file: ~/WP_CONTENT_DIR/debug.log
define( 'WP_DEBUG_LOG',           true );
define( 'WP_DEBUG_DISPLAY',       true );
define( 'SAVEQUERIES',            true );
# DEBUG: MU
define( 'DIEONDBERROR',           true );
define( 'ERRORLOGFILE',           WP_CONTENT_DIR.$ds.'logs'.$ds.'mu_error.log' );

@ini_set( 'log_errors',           'On' );
# PHP Error log location
@ini_set( 'error_log',            WP_CONTENT_DIR.$ds.'logs'.$ds.'php_error.log' );
emperador
fuente
Entonces, ¿tendría que desactivar WP_DEBUG_LOG para asegurarme de que el archivo debug.log nunca se crea en mi directorio wp-content?
jjeaton 01 de
1
Estás haciendo algunas preguntas para este día y hora :) No estoy en condiciones de cerebro para responderlas ahora. Vuelve mañana y salta al chat.
Kaiser
0

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 puede proporcionar una ruta donde desea que se escriba el archivo.

define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );

Ver la documentación de soporte de Wordpress

Michael Teter
fuente