Почему не работает debug.log?

209
17 апреля 2018, 02:58

Задаю в wp-config.php отладочные параметры согласно инструкции в Codex:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

При этом лог-файл не создаётся, вывод в созданный вручную файл /wp-content/debug.log не производится ни при каких настройках разрешений на файл.

На сервере включён php-fpm, может быть, в нём дело?

Answer 1

Причина

Да, проблема связана с php-fpm. Что делает WordPress при указании

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

в wp-config.php? Код в wp-includes/load.php довольно простой

if ( WP_DEBUG ) {
    error_reporting( E_ALL );
    if ( WP_DEBUG_DISPLAY )
        ini_set( 'display_errors', 1 );
    elseif ( null !== WP_DEBUG_DISPLAY )
        ini_set( 'display_errors', 0 );
    if ( WP_DEBUG_LOG ) {
        ini_set( 'log_errors', 1 );
        ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
    }
} else {
    error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}

Нам важна только одна строка

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

В ней WordPress пытается установить новый путь к файлу лога, а именно wp-content/debug.log. Вот только при включённом php-fpm эта функция возвращает false и не срабатывает. Почему?

Потому что на сервере в файле /etc/php-fpm.d/www.conf (в самом конце) по умолчанию установлено:

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

Вот эти параметры не могут быть перекрыты вызовом ini_set(), в результате чего сделать вывод лога ошибок в wp-content/debug.log не происходит.

TL;DR (Решение)

Надо закомментировать следующие строки на сервере в файле /etc/php-fpm.d/www.conf

;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on

и перезапустить php-fpm

systemctl restart php-fpm

После чего файл лога будет успешно создаваться и лог ошибок будет записываться в wp-content/debug.log.

READ ALSO
Как передать много параметров в функцию, если они элементы массива?

Как передать много параметров в функцию, если они элементы массива?

Например, функция array_diff() принимает сколько угодно аргументов

138
yii2 как передать параметр моделе

yii2 как передать параметр моделе

Всем приветВозникла проблема

155
Система координа php [требует правки]

Система координа php [требует правки]

как видбиаты точки на системе координат средствами php

167