Рейтинг:1

Как получить неусеченное сообщение об ошибке из dblog?

флаг ru

«Последние сообщения журнала» очень удобны для отслеживания ошибок на сайтах. Хотя это отлично работает для ошибок в коде PHP, это часто бесполезно для ошибок в коде Twig. Например. У меня есть это сообщение об ошибке в моем журнале:

Ошибка пользователя: «атрибуты» являются недопустимым ключом массива рендеринга в Drupal\Core\Render\Element::children() (Zeile 98 в /web/core/lib/Drupal/Core/Render/Element.php)

#0 /web/core/includes/bootstrap.inc(346): _drupal_error_handler_real(256, '"атрибуты" это...', '/var/www/vhosts...', 98) #1 [внутренняя функция]: _drupal_error_handler(256, '"атрибуты" это...', '/var/www/vhosts...', 98, Массив)

(здесь еще 47 строк)

Эта трассировка содержит 47 точек, большинство из которых относятся к ядру Drupal. Ошибка явно в моей пользовательской теме.

#11 /web/core/lib/Drupal/Core/Theme/ThemeManager.php(384): twig_render_template('themes/custom/w...', Array)

Из-за этой строки я подозреваю, что один из моих пользовательских шаблонов Twig неверен, но я не могу понять, какой из них из-за усеченного имени файла.

Как я могу получить полное сообщение об ошибке одной конкретной строки в трассировке стека? Если бы я знал полное имя файла, упомянутого в строке № 11, это очень помогло бы мне исправить мою ошибку.

Рейтинг:2
флаг cn

Вы получаете результат встроенной обратной трассировки PHP. Друпал использует debug_backtrace() для отображения и Исключение:: getTraceAsString добавлено ведение журнала в Drupal 8.2.x. См. изменить запись. Второй — очень быстрый и эффективный метод обратной трассировки, он не исчерпывает память при обработке глубоко вложенного кода, который обычно используется для шаблонов рендеринга Drupal. Однако он может не предоставить всю информацию, которую вы ищете.

Если вам нужна полностью работающая трассировка стека, используйте Xdebug для перехвата исключения (точка останова не требуется).

https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug

xdebug

флаг ru
Но Xdebug не очень помогает в таком случае. Установка точки останова на основной функции, которая вызывается миллион раз во время запроса, неразумна.
флаг cn
@Hudri, если у вас есть достойная IDE, которая не должна быть проблемой, например, https://www.jetbrains.com/help/phpstorm/debugging-with-php-exception-breakpoints.html.
4uk4 avatar
флаг cn
@Hudri, ошибки Twig можно отловить в Symfony. Вы можете написать свой собственный код для форматирования обратной трассировки и переопределения /core/lib/Drupal/Core/EventSubscriber/ExceptionLoggingSubscriber.php.
флаг ru
О, большое спасибо, я еще не знал Exception Breakpoints в PHPstorm, это очень поможет

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.