white phoenix
Новичок
Отладочный слой. Вывод/перехват ошибок.
Есть lib выполненая в виде класса, его задача - обмен данными с удаленным сервером втечение долгого промежутка времени, естественно могут возникать ситуации в которых нужно вывести сообщение об ошибке/предупреждение и т.п. Глубина вложенности вызовов порой доходит до 20, и для отладки требуется backtrace. Нужно сделать возможность перехвата ошибок, т.е. чтобы скрипт который использует данную библеотеку мог максимально удобно получить оповещение о произошедшей ошибке (например об отсоеденении от сервера), и сделать соответствующие действия, например вывести сообщение в GTK. Вот так сейчас передается ошибка (пример):
Подскажите, как лучше всего реализовать перехват? Подчеркиваю что кода мне не нужно, только намекните на оптимальный путь. Моё решение (возможно кривое):
Из каждой ошибки которая может быть перехвачена сделать сокращеный текст (оформить как константу). Для вышеприведенной ошибки это будет выглядело бы вот как:
Далее метод _send смотрит нет ли сведений об этой ошибке в массиве перенаправления, который был бы вида
Где $callback - ссылка на callback-функцию, $hide_error - логическое значение "отключить ли показ сообщения в STDOUT". Если же в массиве перенаправления ошибка не значится то: если уровень показа ошибок больше или равен уровню ошибки, то показываем в STDOUT следущим образом: наверно Вы обратили внимание на третий аргумент метода _send который отвечает за переменные в сообщении об ошибке, можно сделать еще один массив, где ключи - строки типа 'CONN_FAILED', а значения например 'connection failed (%s - %s)'. Как Вы наверно уже догадались будет sprintf($errstr,$errvars).
При этом хотелось сохранять backtrace в читабельном виде (думаю что var_dump) если библеотека работает в отладочном режиме.
Поверьте, что этот гемор того стоит, куда больший гемор отлаживать без него.
Спасибо всем!
Есть lib выполненая в виде класса, его задача - обмен данными с удаленным сервером втечение долгого промежутка времени, естественно могут возникать ситуации в которых нужно вывести сообщение об ошибке/предупреждение и т.п. Глубина вложенности вызовов порой доходит до 20, и для отладки требуется backtrace. Нужно сделать возможность перехвата ошибок, т.е. чтобы скрипт который использует данную библеотеку мог максимально удобно получить оповещение о произошедшей ошибке (например об отсоеденении от сервера), и сделать соответствующие действия, например вывести сообщение в GTK. Вот так сейчас передается ошибка (пример):
PHP:
$this->dbg->_send('E_WARNING','connection failed ('.socket_last_error().' - '.socket_strerror(socket_last_error()).')');
Из каждой ошибки которая может быть перехвачена сделать сокращеный текст (оформить как константу). Для вышеприведенной ошибки это будет выглядело бы вот как:
PHP:
$this->dbg->_send('E_WARNING','CONN_FAILED',array(socket_last_error(),socket_strerror(socket_last_error()));
PHP:
array(
'CONN_FAILED' => array($callback,$hide_error),
//...
При этом хотелось сохранять backtrace в читабельном виде (думаю что var_dump) если библеотека работает в отладочном режиме.
Поверьте, что этот гемор того стоит, куда больший гемор отлаживать без него.
Спасибо всем!
.