Как заставить ошибки PHP отображаться в представлении отчетов об ошибках GAE?

С приложением PHP в Google App Engine я не могу отобразить ошибки в представлении «Отчеты об ошибках», которое является частью предложения Stackdriver. Он должен быть сконфигурирован по умолчанию, но намеренное добавление ошибок или запись в журнал с помощью error_log() по-прежнему оставляет представление «Отчеты об ошибках» пустым.

Ошибки отображаются в представлении Logging как запрос с ошибкой в ​​request_log.

Нужно ли мне что-то настраивать? В документах говорится, что это должно работать по умолчанию ( и, насколько я могу судить, я не использую гибкую среду).


comment
Здравствуйте, я менеджер по продуктам отчетов об ошибках Stackdriver. Действительно, PHP-приложение на стандарте App Engine должно работать «из коробки», при условии, что в журналах вашего приложения появляются ошибки. Не могли бы вы подтвердить, что видите ошибки с трассировкой стека в журналах?   -  person Steren    schedule 18.08.2016
comment
Привет Стерен, спасибо за продолжение. Я получаю ошибки в журнале запросов (единственное, что я могу выбрать, это активность), но только с номером строки, а не с полной трассировкой стека. Например, неустранимая ошибка PHP: класс «NumberFormatter» не найден в /base/data/home/apps/e~xyz/1.394995078782036923/Public/Models/Group.php в строке 833. Я также отправил запрос в службу поддержки для этого и отправил файл HAR сегодня утром по их запросу.   -  person Whiskey    schedule 18.08.2016


Ответы (2)


Отчеты об ошибках настраиваются по умолчанию для стандартного PHP App Engine, настройка не требуется.

Но похоже, что у анализатора ошибок есть проблема, и он не обнаруживает ваши ошибки, в частности ошибки формы: <type>: <message> in <file> on line <line>. Он ожидает <type>: <message> in <file>:<line>.

Мы будем работать над исправлением в ближайшие недели. Спасибо за ваш отзыв. ОБНОВЛЕНИЕ: Исправление для этой конкретной проблемы было развернуто.

Стерен Джаннини, менеджер по продуктам отчетов об ошибках Stackdriver

person Steren    schedule 19.08.2016
comment
Спасибо, что изучили это! - person Whiskey; 19.08.2016
comment
@Steren, я заметил, что это до сих пор не исправлено и формат, похоже, изменился. Точки входа с поддержкой журналов API и Stackdriver не указывают на сбой. Это работает только тогда, когда используется волшебный недокументированный формат. Есть ли какая-то документация о том, что здесь можно привести, потому что без надлежащего контекста ошибки весь этот продукт для меня в значительной степени бесполезен, особенно если задействованы данные POST. - person nathanjosiah; 31.08.2016
comment
Поймите, что нам нужно некоторое время, чтобы устранить проблему, это вопрос недель (но не дней). О каком недокументированном формате вы говорите? Мы не документируем формат трассировки стека, но документируем структурированную полезную нагрузку для использования с API или ведением журнала Stackdriver: cloud.google.com/error-reporting/docs/formatting-error-messages - person Steren; 31.08.2016
comment
Я так понимаю, с момента этого сообщения прошло почти 2 недели. Во всяком случае, единственный формат, который позволяет выявить ошибку из того, что я тестировал, - это ‹однострочное сообщение›\n в ‹файл›:‹строка›:‹строка›. Любой другой формат, в том числе любой, содержащий более двух описанных строк, не отображается в журнале. - person nathanjosiah; 31.08.2016
comment
@Steren Кроме того, для отладки кода приложения было бы очень полезно иметь возможность видеть подробности запроса, вызвавшего ошибку, например данные POST. Есть ли способ добавить больше деталей, кроме сообщения и имени файла? - person nathanjosiah; 31.08.2016
comment
@Steren Я хочу добавить, что пока первые две строки соответствуют описанному мной формату, все последующие строки могут быть чем-то другим, но они не анализируются правильно. - person nathanjosiah; 02.09.2016
comment
Когда вы говорите «не отображается в журнале», вы имеете в виду, что не видите свои трассировки стека в журнале Stackdriver? Чтобы помочь нам в отладке, не могли бы вы вставить сюда пример трассировки стека, которая есть в ваших журналах GAE, но не отображается в отчетах об ошибках? Спасибо - person Steren; 06.09.2016
comment
Я использую не GAE, а службу отчетов об ошибках, и задокументировал соответствующие части в этом списке: .com/nathanjosiah/4f2c7677b791033c08ddb1001029a0ac - person nathanjosiah; 06.09.2016
comment
@Steren - у меня была точно такая же проблема с php в GAE. Я вижу ошибки в регистраторе, но если я перехожу к отчетам об ошибках (где я должен иметь возможность настроить уведомления), я вижу 0 ошибок. - person kevin; 06.09.2016
comment
Большое спасибо за подробный отчет. Сейчас мы работаем над устранением проблемы. - person Steren; 06.09.2016
comment
какие-нибудь новости об этом @steren? Это очень важно для нас, и последствия того, что это не работает, очень сильно нам вредят. Прошел месяц и 2 недели с момента последней активности в этой теме. - person kevin; 19.09.2016
comment
@Steren Я обнаружил, что PHP Exception иногда представляется как объект, а иногда как строка (показано в журнале stackdriver), есть ли у вас какие-либо рекомендации по получению Exception как объекта для всех исключений PHP? (Я предпочитаю использовать объект Exception вместо строки, потому что объект содержит больше информации, хотя в журналах есть много исключений, представленных строкой) - person Yao Li; 26.02.2018

Отчеты об ошибках Stackdriver настраиваются по умолчанию для приложений PHP App Engine.

На прошлой неделе мы выпустили исправление для нашего анализатора трассировки стека PHP. Теперь мы должны иметь возможность обрабатывать кадры, которые я описал в своем первоначальном ответе. Можете ли вы сообщить мне, все ли у вас в порядке?

person Steren    schedule 19.09.2016
comment
Это работает: теперь в отчетах об ошибках будет отображаться фатальная ошибка PHP. Это великолепно. - person Whiskey; 20.09.2016
comment
Однако ошибки, созданные с помощью error_log(), не отображаются, хотя метаданные в запросе журнала классифицируют их как ERROR. Возможно, потому что вы анализируете фактический ответ, а не метаданные? Предупреждения PHP также не включены, но это согласно спецификации. Однако это делает представление ошибок довольно бесполезным, поскольку PHP классифицирует многие ошибки как предупреждения, даже если они все еще могут нарушить работу приложения, например, ошибка в операторе SQL или неопределенная переменная. Есть ли шанс улучшить регистрацию ошибок, чтобы включить это? - person Whiskey; 20.09.2016
comment
Спасибо за ответ. Мы выпустили исправление исходной проблемы парсинга <type>: <message> in <file> on line <line>. В будущем мы постараемся быть более гибкими с ошибками PHP. - person Steren; 21.09.2016
comment
@Steren В какой-то момент после этого исправления недокументированный магический формат снова изменился, и все наши отчеты перестали работать. Этот сервис почти бесполезен для нас, когда сервис перестает вести журнал при изменении магического формата. Было бы гораздо полезнее, если бы служба регистрировала все, что бы ни случилось, но выдавала красивые изображения только в том случае, если она может разобрать сообщение. Есть ли у вас альтернативный сервис, который вы бы порекомендовали, который просто регистрирует все ошибки? - person nathanjosiah; 20.12.2016
comment
Если Stackdriver не может проанализировать трассировку стека, группировка невозможна. Я бы сказал, что Stackdriver Logging — хорошее место для хранения всех ошибок. Вы также можете отслеживать общее количество ошибок на панели мониторинга App Engine или в Stackdriver Monitoring. - person Steren; 20.12.2016
comment
@Steren Будет ли документация о поддерживаемых форматах, чтобы мы могли использовать эту услугу? - person nathanjosiah; 20.12.2016
comment
Да, мы работаем над лучшей документацией для точного формата, я постараюсь пропинговать эту ветку, как только она выйдет. Для PHP в настоящее время требуется следующий формат: должен начинаться с PHP (Notice|Parse error|Fatal error|Warning) и содержать результат (string)$exception Мы знаем, что это слишком ограничивает, и работаем над тем, чтобы сделать наш синтаксический анализатор PHP более гибким (удалив ограничение префикса). - person Steren; 21.12.2016