Lo stesso messaggio di log continua a essere stampato migliaia di volte nel file debug.log

14 gen 2019, 01:45:48
Visualizzazioni: 755
Voti: 1

Stavo eseguendo il debug del mio codice PHP mentre lavoravo su un sito WordPress scrivendo nel file debug.log con error_log($message) o trigger_error($message).

Il mio messaggio in queste istruzioni di log continua a essere stampato migliaia di volte nel file debug.log a partire da una singola istruzione dichiarata in functions.php (a scopo di esempio qui sto registrando dal functions.php del tema, che risulta nello stesso problema di stampa multipla, anche se stavo eseguendo il debug da un plugin di snippet)

Per verificare se questo problema fosse causato dal mio codice in functions.php o dal plugin di snippet chiamato più volte, ho provato a registrare con meccanismi diversi [chrome console log & alert del browser chrome], il risultato è stato che il messaggio di log PHP veniva stampato più volte mentre il console log di chrome e l'alert del browser chrome apparivano solo una volta. Quindi credo che il mio codice non venga eseguito più volte, ma i messaggi di debug log stampati da error_log o trigger_error vengono stampati più volte e continuano a essere stampati migliaia di volte.

Ho pensato che potesse essere dovuto al mio ambiente di sviluppo locale, quindi ho provato la stessa cosa in una nuova installazione di WordPress in un ambiente reale, è successa la stessa cosa. Quindi non ho ancora trovato una soluzione/spiegazione.

IL MIO functions.php DEL TEMA CON TUTTO IL CODICE TESTATO:

.
.
.
//continua a stampare nel debug.log (molte volte)
$debug_log = "DEBUG-debug log";
trigger_error($debug_log);
//OPPURE
error_log($debug_log);

//stampa solo una volta nella console di chrome
$debug_console = "DEBUG-console";
echo "<script>console.log('$debug_console');</script>";

//alert solo una volta in chrome
$debug_alert = "DEBUG-alert";
echo "<script type='text/javascript'>alert('$debug_alert');</script>";

IL MIO FILE debug.log È COSÌ:

[14-Jan-2019 01:05:50 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:05:51 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:05:51 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:05:54 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:05:55 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:05:59 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:04 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:25 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:26 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:26 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:27 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:29 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:31 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:31 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:31 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:32 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:06:47 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:02 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:17 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:29 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:31 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:32 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:07:47 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15
[14-Jan-2019 01:08:02 UTC] PHP Notice:  DEBUG-debug log in /app/public/wp-content/themes/Avada-Child-Theme/functions.php on line 15

EDIT: Chiarezza sulla domanda Per essere chiaro, voglio dire che il log viene stampato più volte (e continua a stampare migliaia di volte) ogni volta che carico una pagina (quindi 1 caricamento di pagina -> log multipli ripetuti continuamente da una singola istruzione di log in functions.php)

EDIT: Disabilitato WordPress Heartbeat Come suggerito, ho provato a disabilitare WordPress Heartbeat aggiungendo un pezzo di codice trovato su Google per disabilitare Heartbeat in WordPress (controllerò più tardi se è necessario o meno) in functions.php all'inizio... ma continuo a ricevere quei messaggi di log più volte in un singolo caricamento di pagina.

CODICE HEARTBEAT AGGIUNTO A functions.php:

add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
    wp_deregister_script('heartbeat');
}

EDIT: Controllate le chiamate AJAX Come suggerito, ho monitorato tutte le chiamate di rete al mio server tramite le opzioni per sviluppatori di chrome... non ci sono chiamate di rete dopo che una pagina è completamente caricata (pagina caricata con chiamate di rete get/post html + assets) quindi nessuna richiesta Ajax al server dopo il caricamento della pagina.

4
Commenti

functions.php viene eseguito ogni volta che qualcuno visita una pagina del tuo sito web. Quindi sì, verrà registrato molte volte.

Jacob Peattie Jacob Peattie
14 gen 2019 01:54:54

Scusa, sono stato un po' poco chiaro.. Volevo dire che ogni volta che carico una pagina viene stampato più volte (e continua a stampare migliaia di volte).

Utsav Madaan Utsav Madaan
14 gen 2019 09:21:07

Sei loggato?

Krzysiek Dróżdż Krzysiek Dróżdż
14 gen 2019 09:23:48

Sì, sono l'amministratore del sito, ho effettuato l'accesso come amministratore... e sono l'unico a utilizzarlo tramite l'ambiente di sviluppo locale (local by flywheel)

Utsav Madaan Utsav Madaan
14 gen 2019 09:25:13
Tutte le risposte alla domanda 1
10

OK, per come ho capito, hai inserito questo codice:

$debug_log = "DEBUG-log di debug";
trigger_error($debug_log);
//OPPURE
error_log($debug_log);

direttamente nel tuo file functions.php.

Ciò significa che questo codice verrà eseguito (quindi un nuovo elemento verrà aggiunto al file di log) ogni volta che il file functions.php viene caricato - quindi durante ogni richiesta al tuo WordPress.

Significa che ogni volta che qualcuno visualizza la tua pagina, verrà aggiunto un nuovo elemento al log.

Ma... Non è tutto... Se sei loggato, WordPress invia richieste Heartbeat. Anche queste risulteranno in nuovi elementi nel log.

Non ci sono così tanti elementi di log registrati con lo stesso timestamp nel tuo log, quindi secondo me è improbabile che vengano stampati nella stessa richiesta.

PS. Il JS non verrà eseguito durante le chiamate AJAX, quindi non li vedrai più volte.

14 gen 2019 09:29:09
Commenti

Quindi ora ho aggiunto un pezzo di codice che ho trovato su internet per disabilitare Heartbeat in Wordpress (controllerò più tardi se è necessario o meno) in functions.php all'inizio...ma continuo a ricevere quei messaggi di log più volte durante il caricamento di una singola pagina.

Utsav Madaan Utsav Madaan
14 gen 2019 09:41:02

Ci sono richieste AJAX sul tuo sito?

Krzysiek Dróżdż Krzysiek Dróżdż
14 gen 2019 10:13:53

Ho monitorato le chiamate di rete tramite le opzioni per sviluppatori di Chrome verso il mio server web...non ci sono chiamate di rete dopo che una pagina è completamente caricata (la pagina viene caricata con chiamate get/post html + asset di rete)

Utsav Madaan Utsav Madaan
14 gen 2019 10:41:50

Signore, può provare lei stesso a stampare il log da functions.php nel suo ambiente disponibile con una nuova installazione di WordPress e come menzionato nella domanda originale ho effettivamente provato questo e ho ottenuto gli stessi risultati anche con una nuova installazione di WordPress su un server reale. Quindi credo che non ci sia nulla di sbagliato nel codice/impostazioni dell'utente.

Utsav Madaan Utsav Madaan
14 gen 2019 10:45:17

Sei l'unico che sta visitando quel sito?

Krzysiek Dróżdż Krzysiek Dróżdż
14 gen 2019 16:31:21

Sì, sono l'unico che ha accesso e visita il sito

Utsav Madaan Utsav Madaan
14 gen 2019 17:44:28

@UtsavMadaan aggiungi il var_dump di $_SERVER a quel log. Saprai quali richieste stanno causando i log.

Krzysiek Dróżdż Krzysiek Dróżdż
14 gen 2019 17:46:05

Ok, quindi ho fatto in modo che i log stampassero la rappresentazione stringa di $_SERVER molte meno volte rispetto ai log che ho stampato per i test... ora stampa solo 3-4 volte per richiesta con il dump di $_SERVER con l'origine/URI della richiesta proveniente dalla pagina frontend, cron e ajax. Non so cosa fare... lo analizzerò correttamente tra qualche giorno, avendo pochissimo tempo per il progetto, e aggiornerò qui. Grazie comunque.

Utsav Madaan Utsav Madaan
15 gen 2019 08:56:47

Quindi hai risposto da solo alla tua domanda - non ci sono più log multipli per richiesta. AJAX è un'altra richiesta (e apparentemente c'è una chiamata AJAX nella tua pagina) e CRON è un'altra richiesta (e WP effettua alcune richieste CRON in background durante la visita della pagina) - tutto è a posto e esattamente come dovrebbe essere.

Krzysiek Dróżdż Krzysiek Dróżdż
15 gen 2019 09:04:29

No signore, il problema non è risolto perché i log sono molto di più quando si registra solo un testo casuale come mostrato nella domanda originale (un piccolo testo casuale registrato e veniva stampato molte volte e continua a stampare), inoltre non sto utilizzando alcun tema esterno per ora...scoprirò la causa tra qualche giorno e aggiornerò qui...ma è strano quando registro $_SERVER registra solo 4-5 volte per richiesta...ma con un testo casuale continua a registrare

Utsav Madaan Utsav Madaan
16 gen 2019 16:00:55
Mostra i restanti 5 commenti