Как нормально дебажить wordpress?
Есть достаточно крупный проект с кучей говнокода на wordpress - сборная солянка примерно из 200 плагинов. На основе этого сейчас пишется кастомный код. Стоит вопрос - чем его нормально дебажить? WP_DEBUG при каждой перезагрузке страницы выводит кучу PHP Notice из разных плагинов, в которых искать свой error_log нереально. Как я понял, конфигурировать WP_DEBUG нельзя, чтобы он что-то игнорил. var_dump-ом это делать неудобно. А всякие query monitor-ы не умеют писать в файлы. Что делать в таком случае?
Дополнительно:
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, но если вы отлаживаете что-то, что дергают другие пользователи или внешние сервисы, то без логгера сложно.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В крупном 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');
Для своего кода сделайте отдельную функцию, которая пишет в отдельный файл, например в
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'); }
Использование:
my_debug_log($_POST, 'form payload'); my_debug_log($result, 'api result');
Для интерактивной отладки лучше Xdebug + IDE. Для запросов, хуков, SQL и шаблонов полезен Query Monitor, но он не заменяет файловый лог, когда проблему воспроизводит внешний сервис или другой пользователь. Ещё полезно поднимать локальную копию сайта и отключать лишние плагины группами, иначе 200 активных плагинов будут маскировать настоящую ошибку.