È possibile modificare la posizione del file di log per WP_DEBUG_LOG?
Uso WP_DEBUG_LOG nel mio ambiente di sviluppo e non ho problemi con debug.log nella directory wp-content.
A volte attivo WP_DEBUG in produzione quando ho bisogno di fare debug di qualcosa, e voglio ancora utilizzare il log ma vorrei reindirizzarlo in una posizione esterna alla mia root web. È possibile farlo usando WP_DEBUG_LOG?
Sembra che la maggior parte delle risposte qui non siano più valide per la versione 5.1 di WP e superiori a causa di questa modifica: https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused-changes-in-5-1/
Ora puoi definire WP_DEBUG_LOG
come un percorso in wp-config.php
se vuoi sovrascrivere il file predefinito wp-content/debug.log
, ad esempio:
define( 'WP_DEBUG_LOG', 'wp-content/uploads/debug.log' );

Si scopre che tutto ciò che fa WP_DEBUG_LOG è:
ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
Quindi, se vuoi cambiare la posizione del log per WP_DEBUG_LOG in un plugin o tema, la risposta di webaware è la migliore. Se vuoi semplicemente cambiarlo all'interno di wp-config.php
puoi sostituire define( 'WP_DEBUG_LOG', true );
con le 2 righe sopra e modificare il file di log ovunque tu voglia.

Dopo un paio d'anni, non riesco a far popolare il file con gli errori a meno che non sia nella cartella dei contenuti di WordPress.

@MikeKormendy - potrebbe essere un problema di permessi della directory. La posizione in cui desideri scrivere il file deve essere scrivibile dall'utente che è il proprietario del processo per il runner PHP. In termini semplici, assicurati che la nuova destinazione del file abbia gli stessi permessi della cartella wp-content.

I tempi cambiano, e così anche le risposte corrette alle domande tecniche.
La risposta attuale a fine 2019 è semplice. Quando si definisce la "costante" WP_DEBUG_LOG in wp-config.php, ora è possibile specificare il percorso in cui si vuole che il file venga scritto.
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );

Sì, se aggiungi del codice a un plugin o al functions.php di un tema in questo modo:
if (defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.txt' );
}
Modifica: qualcun altro mi ha appena presentato la necessità di fare questo, quindi ho inserito del codice in un semplice plugin che possono modificare; è disponibile come gist se qualcuno lo desidera.

Ho provato ad aggiungere questo al mio file wp-config.php e non funziona. È perché wp-config.php viene caricato prima del punto effettivo nel codice dove WP_DEBUG_LOG viene utilizzato per definire il file di log?

Sono riuscito a farlo funzionare aggiungendolo in un mu-plugin. C'è un modo per fare questa modifica direttamente in wp-config? Suppongo che dovrei semplicemente impostare WP_DEBUG_LOG su false e sostituire ciò che fa manualmente?

Sì, basta inserirlo in un semplice plugin. Vedi Scrivere un plugin sul codex.

Sembra che il codice di WordPress sia cambiato dall'ultima risposta a questa domanda. L'attuale funzione wp_debug_mode() relativa a queste costanti include un test per verificare se WP_DEBUG_LOG è uguale a true o 1 -- in tal caso si comporta come altri hanno descritto.
Tuttavia, puoi anche impostare quella costante come una stringa -- il percorso del file preferito -- e il log verrà scritto lì. Ad esempio, puoi impostarlo su un percorso esterno alle tue directory accessibili pubblicamente via web. Potresti dover modificare i permessi dei file per farlo funzionare.
Ho cercato questa risposta perché il plugin di sicurezza WordFence segnala che il mio debug log potrebbe essere accessibile in /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;
}

Per quanto ne so, non è possibile modificare la posizione del file di debug predefinito. Quello che puoi modificare è la posizione del log degli errori MU e la posizione del file di log degli errori 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' );
# Posizione del log degli errori PHP
@ini_set( 'error_log', WP_CONTENT_DIR.$ds.'logs'.$ds.'php_error.log' );

Quindi dovrei disattivare WP_DEBUG_LOG per assicurarmi che il file debug.log non venga mai creato nella mia directory wp-content?

Ho avuto questo problema. Quello che ho fatto è stato aggiungere quanto segue al file wp-config:
define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', '/var/log/wp-debug.log' );
Poi ho modificato i permessi del file wordpress-debug.log con chown:
chown -R www-data:www-data /var/log/wp-debug.log
Nel mio caso si trattava di un problema di permessi. Utilizzando chown per impostare i permessi del file all'utente/gruppo di WordPress ho risolto.
