Apakah mungkin mengubah lokasi file log untuk WP_DEBUG_LOG?

18

Saya menggunakan WP_DEBUG_LOG di lingkungan pengembangan saya dan tidak memiliki masalah dengan debug.log berada di direktori konten-wp.

Terkadang saya mengaktifkan WP_DEBUG dalam produksi ketika saya perlu men-debug sesuatu, dan saya masih ingin menggunakan log tetapi ingin mengarahkan ulang ke sesuatu di luar root web saya. Apakah ini mungkin menggunakan WP_DEBUG_LOG?

Jonaton
sumber

Jawaban:

19

Ternyata yang dilakukan WP_DEBUG_LOG adalah:

ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );

Jadi, jika Anda ingin mengubah lokasi log untuk WP_DEBUG_LOG dalam sebuah plugin atau tema, jawaban webaware adalah yang terbaik. Jika Anda hanya ingin mengubahnya dalam wp-config.phpAnda dapat mengganti define( 'WP_DEBUG_LOG', true );dengan 2 baris di atas dan mengubah file log ke mana pun Anda inginkan.

Jonaton
sumber
Beberapa tahun kemudian, dan saya sepertinya tidak bisa membuat file diisi dengan kesalahan kecuali itu ada di folder konten wordpress.
Mike Kormendy
@MikeKormendy - ini bisa menjadi masalah izin direktori. Lokasi tempat Anda ingin menulis file harus dapat ditulis oleh pengguna yang merupakan pemilik proses untuk pelari php. Secara sederhana, pastikan tujuan file baru memiliki izin yang sama seperti yang dimiliki folder wp-content saat ini.
Michael Teter
4

Ya, jika Anda menambahkan beberapa kode ke plugin atau functions.php tema seperti:

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

Sunting: orang lain baru saja memberi saya kebutuhan untuk melakukan ini, jadi saya telah memasukkan beberapa kode ke plugin sederhana yang dapat mereka edit; tersedia sebagai intisari jika ada yang menginginkannya.

sadar web
sumber
Saya mencoba menambahkan ini ke file wp-config.php saya dan tidak berfungsi. Apakah itu karena wp-config.php mungkin dimuat lebih awal dari tempat sebenarnya dalam kode tempat WP_DEBUG_LOG digunakan untuk mendefinisikan file log?
jjeaton
1
Saya bisa membuatnya berfungsi dengan menambahkannya ke dalam plugin-mu. Apakah tetap ada bagi saya untuk hanya membuat perubahan ini dalam wp-config? Saya berasumsi saya hanya perlu mengatur WP_DEBUG_LOG menjadi false dan mengganti apa fungsinya sendiri?
jjeaton
1
Ini berfungsi dengan baik jika Anda dapat memasukkan kode dalam plugin atau tema, terima kasih!
jjeaton
Ya, cukup buang ke plugin sederhana. Lihat Menulis plugin pada codex.
webaware
1

Sepertinya kode WordPress telah berubah sejak jawaban terakhir untuk pertanyaan ini diposting. Fungsi wp_debug_mode () saat ini yang terkait dengan konstanta-konstanta tersebut mencakup pengujian untuk apakah WP_DEBUG_LOG sama dengan true atau 1 - dalam hal ini berperilaku seperti yang dijelaskan orang lain.

Namun, Anda juga dapat mengatur bahwa konstan ke string - jalur file pilihan Anda - dan log akan menjadi output di sana. Misalnya, Anda dapat mengaturnya ke jalur di luar direktori Anda untuk konten web yang dapat diakses publik. Anda mungkin harus bermain dengan izin file untuk membuatnya berfungsi.

Saya datang mencari jawaban ini karena plugin keamanan WordFence mengeluh tentang log debug saya yang berpotensi diakses di / 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
sumber
0

Afaik, Anda tidak dapat mengubah lokasi untuk file debug default. Apa yang dapat Anda ubah adalah lokasi untuk log kesalahan MU serta lokasi untuk file log kesalahan 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' );
kaisar
sumber
Jadi saya harus mematikan WP_DEBUG_LOG untuk memastikan bahwa file debug.log tidak pernah dibuat di direktori konten wp saya?
jjeaton
1
Anda mengajukan beberapa pertanyaan untuk hari dan waktu ini :) Saya tidak dalam kondisi otak untuk menjawabnya sekarang. Kembalilah besok dan lompat mengobrol.
kaiser
0

Waktu berubah, dan begitu juga jawaban yang benar untuk pertanyaan teknis.

Jawaban saat ini hingga akhir 2019 sederhana. Saat mendefinisikan WP_DEBUG_LOG "konstan" di wp-config.php, Anda sekarang dapat memberikan path tempat Anda ingin file ditulis.

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

Lihat Dokumentasi Dukungan Wordpress

Michael Teter
sumber