Можно ли изменить расположение файла журнала для WP_DEBUG_LOG?
Я использую WP_DEBUG_LOG в среде разработки, и у меня нет проблем с тем, что debug.log находится в директории wp-content.
Иногда я включаю WP_DEBUG на продакшене, когда мне нужно что-то отладить, и я по-прежнему хочу использовать лог, но хотел бы перенаправить его куда-то за пределы корневой веб-директории. Возможно ли это сделать с помощью WP_DEBUG_LOG?
Похоже, большинство ответов здесь уже неактуальны для версии WP 5.1 и выше из-за этого изменения: https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused-changes-in-5-1/
Теперь вы можете определить WP_DEBUG_LOG
как путь в файле wp-config.php
, если хотите изменить расположение лога по умолчанию wp-content/debug.log
. Например:
define( 'WP_DEBUG_LOG', 'wp-content/uploads/debug.log' );

Оказывается, что WP_DEBUG_LOG выполняет всего лишь:
ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
Таким образом, если вы хотите изменить местоположение лога для WP_DEBUG_LOG в плагине или теме, ответ webaware будет лучшим вариантом. Если же вы просто хотите изменить его в файле wp-config.php
, вы можете заменить строку define( 'WP_DEBUG_LOG', true );
на две вышеуказанные строки и указать путь к файлу лога, куда вам нужно.

Прошло пару лет, и я не могу заставить файл заполняться ошибками, если он не находится в папке контента WordPress.

@MikeKormendy - это может быть проблема с правами на директорию. Место, куда вы хотите записать файл, должно быть доступно для записи пользователю, который является владельцем процесса PHP. Проще говоря, убедитесь, что новая директория для файла имеет такие же права, как и папка wp-content.

Времена меняются, и правильные ответы на технические вопросы тоже.
Текущий ответ, актуальный на конец 2019 года, прост. При определении "константы" WP_DEBUG_LOG в файле wp-config.php, теперь можно указать путь, куда должен записываться файл.
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );
Смотрите Документацию поддержки WordPress

Да, если вы добавите следующий код в плагин или файл functions.php темы:
if (defined('WP_DEBUG_LOG') && WP_DEBUG_LOG) {
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.txt' );
}
Примечание: кто-то недавно обратился ко мне с необходимостью сделать это, поэтому я добавил код в простой плагин, который можно редактировать; он доступен как gist, если кому-то понадобится.

Я попытался добавить это в свой файл wp-config.php, но это не сработало. Может быть, потому что wp-config.php загружается раньше, чем фактическое место в коде, где используется WP_DEBUG_LOG для определения файла журнала?

Мне удалось заставить это работать, добавив код в mu-плагин. Есть ли способ сделать это изменение только в wp-config? Я предполагаю, что мне просто нужно установить WP_DEBUG_LOG в false и самостоятельно заменить его функционал?

Это хорошо работает, если вы можете поместить код в плагин или тему, спасибо!

Да, просто добавьте его в простой плагин. Смотрите Создание плагина в кодексе.

Похоже, что код WordPress изменился с момента публикации последнего ответа на этот вопрос. Текущая функция wp_debug_mode(), связанная с этими константами, включает проверку, соответствует ли WP_DEBUG_LOG значению true или 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;
}

Насколько мне известно, изменить расположение файла отладки по умолчанию нельзя. Однако можно изменить расположение лога ошибок MU, а также расположение файла лога ошибок PHP.
$ds = DIRECTORY_SEPARATOR;
# ОТЛАДКА
define( 'WP_DEBUG', true );
// файл: ~/WP_CONTENT_DIR/debug.log
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'SAVEQUERIES', true );
# ОТЛАДКА: MU
define( 'DIEONDBERROR', true );
define( 'ERRORLOGFILE', WP_CONTENT_DIR.$ds.'logs'.$ds.'mu_error.log' );
@ini_set( 'log_errors', 'On' );
# Расположение лога ошибок PHP
@ini_set( 'error_log', WP_CONTENT_DIR.$ds.'logs'.$ds.'php_error.log' );

Значит, мне нужно отключить WP_DEBUG_LOG, чтобы убедиться, что файл debug.log никогда не создается в моей директории wp-content?

У меня была такая проблема. Я решил её, добавив следующее в wp-config:
define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', '/var/log/wp-debug.log' );
Затем изменил владельца файла wordpress-debug.log:
chown -R www-data:www-data /var/log/wp-debug.log
В моём случае это была проблема с правами доступа. Использование chown для установки прав владельца файла на пользователя/группу WordPress решило проблему.
