Comments 12
Т.е. для того, чтобы в NewRelic не было Unhandled Exception вы решили сделать GoodException с вьюхами вместо того, чтобы написать ErrorHandler, в котором указывать, какие ошибки кидать в ньюрелик, а какие — нет?
+3
А для того, чтобы юзеру выводился красивый ответ нужно 2 вещи:
1. Кидать ошибки-наследники
2. Почитать доку по отлову ошибок — www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html — там как раз есть раздел «Customizing Error Display»
1. Кидать ошибки-наследники
UserException
2. Почитать доку по отлову ошибок — www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html — там как раз есть раздел «Customizing Error Display»
+2
Эта дока про вывод ошибок. Если ошибку не ловить, но аккуратно выводить через ErrorHandler, она так и остается непойманной. Соответственно, можно выбросить «GoodException», если ошибка не критичная. А если с ошибкой надо разбираться, то можно выбросить и не ловить другое исключение — HttpServerException и т.п. ErrorHandler его обработает, но оно будет непойманным.
0
Я даже специально 2 разных комментария оставил — про «непойпанность», и отдельно — про отображение. Почему ответили-то только на один? :)
Чем вас смущает то, что ошибка «не поймана»? Не нравится, когда в ньюрелике отображается куча 400/404-х? Вот — как раз в ErrorHandler'е есть волшебный метод
Чем вас смущает то, что ошибка «не поймана»? Не нравится, когда в ньюрелике отображается куча 400/404-х? Вот — как раз в ErrorHandler'е есть волшебный метод
handleException()
внутри которого очень удобно решать — посылать ошибку в ньюрелик, или не нужно.+2
Мы не решаем, что посылать в ньюрелик, а что — нет.
Все, что мы делаем для ньюрелика — вызываем в index.php
А дальше неперехваченные исключения сами попадают в статистику, что нас и смущало
Все, что мы делаем для ньюрелика — вызываем в index.php
if (extension_loaded('newrelic')) {
newrelic_set_appname('projectname');
}
А дальше неперехваченные исключения сами попадают в статистику, что нас и смущало
0
Вы не подумайте, что я это всё из вредности писал — просто у меня у самого проект с Yii2+newrelic под боком — и никаких не отловленных исключений там нет — мы сами всё в ньюрелик репортим, что нам нужно.
Оказывается в агенте от 8 июля внесли соответствующие изменения, добавляющие не отловленные исключения. У нас более старая версия.
Оказывается в агенте от 8 июля внесли соответствующие изменения, добавляющие не отловленные исключения. У нас более старая версия.
0
Пришёл ответ от техподдержки. Для того, чтобы отключить отлов ошибок — нужно добавить вот такую строку в конфиг php:
newrelic.special.disable_instrumentation = restore_exception_handler,set_exception_handler
0
Отлов ошибок полезен. Если случился Warning или Notice, то тоже будет не пойманной исключение. Если возникло исключение внутри фреймворка, о котором разработчик не позаботился, то такие события тоже стоит фиксировать в мониторинге. На мой взгляд, наиболее удачный подход — самостоятельно контролировать, что будет ошибкой, а что — нет. При этом все нехорошие события, о которых разработчик не позаботился, автоматически считать ошибками. Это на мой взгляд.
0
Дык я не спорю, что он полезен. Все не отловленные ошибки попадают в стандартный Yii'шный ErrorHandler, а дальше уже с ними можно делать всё, что угодно: посылать в ньюрелик, не посылать в ньюрелик, нарисовать юзеру красивую страницу, и т.д.
Ваш подход меня пугает как минимум тем, что вы внутри эксепшена меняете состояние системы. Ошибки же вообще ничего не должны менять — иначе может стать ещё хуже.
Ваш подход меня пугает как минимум тем, что вы внутри эксепшена меняете состояние системы. Ошибки же вообще ничего не должны менять — иначе может стать ещё хуже.
0
Меняю состояние в смысле возвращаю 500 ошибку? На мой взгляд это нормально. В стандартном ErrorHandler происходит примерно то-же самое.
public function handleException($exception)
{
if ($exception instanceof ExitException) {
return;
}
$this->exception = $exception;
// disable error capturing to avoid recursive errors while handling exceptions
$this->unregister();
// set preventive HTTP status code to 500 in case error handling somehow fails and headers are sent
// HTTP exceptions will override this value in renderException()
if (PHP_SAPI !== 'cli') {
http_response_code(500);
}
...
0
Дык разницу-то заметьте — не внутри конструктора Exception'а, а в обработчике ошибок.
0
Sign up to leave a comment.
Отлов и обработка исключений в Yii2