Как нормально дебажить wordpress?

Ссылка скопирована
1 ответ

Есть достаточно крупный проект с кучей говнокода на wordpress - сборная солянка примерно из 200 плагинов. На основе этого сейчас пишется кастомный код. Стоит вопрос - чем его нормально дебажить? WP_DEBUG при каждой перезагрузке страницы выводит кучу PHP Notice из разных плагинов, в которых искать свой error_log нереально. Как я понял, конфигурировать WP_DEBUG нельзя, чтобы он что-то игнорил. var_dump-ом это делать неудобно. А всякие query monitor-ы не умеют писать в файлы. Что делать в таком случае?

Дополнительно:

Как нормально дебажить wordpress?

Stalker_RED @Stalker_RED Написать свою функцию, которая форматирует как вам нравится, и пишет куда вам нравится.

В минимальном варианте у вас там всего пара строчек будет

$logStr = is_string($data) ? $data : var_export($data, true); error_log($logStr, 3, $this->logFileName);

$logStr = is_string($data) ? $data : var_export($data, true); error_log($logStr, 3, $this->logFileName);

Я обычно сразу добавляю немножко обвязки к ним - выводить ли таймстампы, дублировать ли вывод в консоль или браузер, дампить ли все параметры из GET или POST запроса.
В принципе это все не особо нужно, когда есть xdebug, но если вы отлаживаете что-то, что дергают другие пользователи или внешние сервисы, то без логгера сложно.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Web-разработка Ответ

В крупном WordPress-проекте с большим количеством чужих notice нормальный дебаг через вывод на экран действительно превращается в шум. Рабочая схема: отключить показ ошибок пользователю, писать общий лог WordPress в файл и завести отдельный логгер для своего кода.

В wp-config.php для разработки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', '0');

define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); @ini_set('display_errors', '0');

Для своего кода сделайте отдельную функцию, которая пишет в отдельный файл, например в wp-content/my-debug.log:

function my_debug_log($data, string $label = ''): void {
    if (! defined('WP_DEBUG') || ! WP_DEBUG) {
        return;
    }
 
    $message = is_scalar($data) ? (string) $data : print_r($data, true);
    $line = '[' . date('Y-m-d H:i:s') . '] ';
 
    if ($label !== '') {
        $line .= $label . ': ';
    }
 
    error_log($line . $message . PHP_EOL, 3, WP_CONTENT_DIR . '/my-debug.log');
}

function my_debug_log($data, string $label = ''): void { if (! defined('WP_DEBUG') || ! WP_DEBUG) { return; } $message = is_scalar($data) ? (string) $data : print_r($data, true); $line = '[' . date('Y-m-d H:i:s') . '] '; if ($label !== '') { $line .= $label . ': '; } error_log($line . $message . PHP_EOL, 3, WP_CONTENT_DIR . '/my-debug.log'); }

Использование:

my_debug_log($_POST, 'form payload');
my_debug_log($result, 'api result');

my_debug_log($_POST, 'form payload'); my_debug_log($result, 'api result');

Для интерактивной отладки лучше Xdebug + IDE. Для запросов, хуков, SQL и шаблонов полезен Query Monitor, но он не заменяет файловый лог, когда проблему воспроизводит внешний сервис или другой пользователь. Ещё полезно поднимать локальную копию сайта и отключать лишние плагины группами, иначе 200 активных плагинов будут маскировать настоящую ошибку.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно