Чи можна змінити розташування файлу журналу для WP_DEBUG_LOG?


18

Я використовую WP_DEBUG_LOG в своєму середовищі розробки і не маю проблем з тим, щоб debug.log знаходився в каталозі wp-content.

Іноді я включаю WP_DEBUG у виробництві, коли мені потрібно щось налагодити, і я все одно хочу використовувати журнал, але хотів би перенаправити його на щось поза мого веб-кореня. Чи можливо це за допомогою WP_DEBUG_LOG?

Відповіді:


19

Виявляється, все, що WP_DEBUG_LOG робить:

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

Отже, якщо ви хочете змінити розташування журналу для WP_DEBUG_LOG у плагіні чи темі, найкращим є відповідь веб-програм . Якщо ви просто хочете, щоб його змінили всередині, wp-config.phpви можете замінити define( 'WP_DEBUG_LOG', true );вищевказані два рядки та змінити файл журналу на те, де ви хочете.


Через пару років, і мені здається, що файл не може заповнити помилки, якщо він не знаходиться в папці вмісту Wordpress.
Майк Корменді

@MikeKormendy - це може бути проблема прав доступу до каталогу. Місце, де ви хочете записати файл, має писати користувач, який є власником процесу для запуску php. Простіше кажучи, переконайтеся, що нове призначення файлу має ті ж дозволи, що і папка wp-content в даний час.
Майкл Тетер

5

Здається, відповіді тут вже не відповідають дійсності версії 5.1 і вище, оскільки ця зміна https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused-changes-in-5-1 /

Тепер ви можете визначити WP_DEBUG_LOGяк шлях, якщо ви хочете замінити за замовчуванням, wp-content/debug.logнаприклад:

define( 'WP_DEBUG_LOG', 'wp-content/uploads/debug.log' );

4

Так, якщо ви додали якийсь код у плагін або тему function.php так:

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

Редагувати: хтось ще щойно представив мені необхідність це зробити, тому я перекинув якийсь код у простий плагін, який вони можуть редагувати; вона доступна як суть, якщо хто хоче.


Я спробував додати це до файлу wp-config.php, і він не працює. Це тому, що wp-config.php, можливо, завантажується раніше, ніж фактичне місце в коді, де WP_DEBUG_LOG використовується для визначення файлу журналу?
jjeaton

1
Мені вдалося змусити це працювати, додавши його у mu-плагін. Чи все-таки мені просто потрібно внести цю зміну в wp-config? Я припускаю, що мені доведеться просто встановити WP_DEBUG_LOG на значення false та замінити те, що він робить сам?
jjeaton

1
Це добре працює, якщо ви можете помістити код у плагін або тему, дякую!
jjeaton

Так, просто скиньте його на простий плагін. Див. Розділ Написання плагіна на кодекс.
webaware

1

Схоже, код WordPress змінився з моменту останньої відповіді на це питання. Поточна функція wp_debug_mode (), пов’язана з цими константами, включає тест на те, чи WP_DEBUG_LOG прирівнюється до істинного чи 1 - у цьому випадку він поводиться так, як описали його інші.

Однак ви також можете встановити цю константу на рядок - ваш бажаний шлях до файлу - і журнал буде виведений туди. Наприклад, ви можете встановити його на шлях поза вашими каталогами для загальнодоступного веб-контенту. Можливо, вам доведеться пограти з дозволами на файли, щоб працювати так.

Я шукав цю відповідь, оскільки плагін безпеки WordFence скаржиться на те, що мій журнал налагодження є потенційно доступним у / 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; }


0

Афаїку, ви не можете змінити розташування файлу налагодження за замовчуванням. Що ви можете змінити - це місце для журналу помилок MU, а також файл журналу помилок 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' );

Тому мені потрібно вимкнути WP_DEBUG_LOG, щоб переконатися, що файл debug.log ніколи не створюється в моєму каталогу вмісту wp?
jjeaton

1
Ви задаєте цілий день запитань на цей день і час :) Мені зараз не в мозку відповідати на них. Приходьте завтра і стрибайте в чаті.
кайзер

0

Часи змінюються, і тому правильні відповіді на технічні питання.

Поточна відповідь станом на кінець 2019 року проста. Визначаючи WP_DEBUG_LOG "константу" в wp-config.php, тепер ви можете надати шлях, куди потрібно записати файл.

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

Див. Документацію щодо підтримки Wordpress

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.