Можно ли изменить местоположение файла журнала для 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 );на 2 строки выше и изменить файл журнала там, где вы хотите.


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

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

5

Кажется, что ответы здесь уже не верны для WP версии 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

Да, если вы добавите некоторый код в плагин или файл functions.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 используется для определения файла журнала?
Джеатон

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

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

Да, просто добавьте его в простой плагин. См. Написание плагина для кодекса.
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

Afaik, вы не можете изменить расположение файла отладки по умолчанию. То, что вы можете изменить, - это местоположение журнала ошибок 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-content?
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.