it-roy-ru.com

Можно ли изменить местоположение файла журнала для WP_DEBUG_LOG?

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

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

14
jjeaton

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

17
jjeaton

Да, если вы добавите некоторый код в плагин или файл functions.php темы, например:

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

Правка: кто-то еще только что представил мне необходимость сделать это, поэтому я поместил некоторый код в простой плагин, который они могут редактировать; это доступно как Gist , если кто-то хочет это.

4
webaware

Похоже, что код 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; }

1
David F. Carr

Похоже, что ответы здесь не верны для WP версии 5.1 и выше, так как это изменение https://make.wordpress.org/core/2019/01/23/miscellaneous-developer-focused -изменения в 5-1/

Теперь вы можете определить WP_DEBUG_LOG как путь, если хотите переопределить wp-content/debug.log по умолчанию, например:

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

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' );
0
kaiser