|
генерация и логирование ошибки
Кто знаком с php, тот знает, что там есть замечательная функция trigger_error('my error'). Функция генерирует пользовательскую ошибку: E_USER_NOTICE/WARNING/ERROR.
Если определен собственный обработчик ошибок, то все это вместе позволяет в удобном виде логировать ошибки скрипта, а также свои ошибки. Например <?php if(/* что-то пошло не так */){ trigger_error('текст ошибки'); } ?> В обработчике ошибок ловим саму ошибку, имя файла и номер строки, где произошла ошибка. Ну и там же доступен контекст и трассировка. При генерации такой ошибки скрипт не останавливается - это не исключение. На js я переопределил window.onerror и написал функцию логирования ошибок на сервере. Так вот интересует вопрос, как в js реализовать аналог trigger_error из php. То есть чтобы можно было сгенерировать ошибку, но не останавливать выполнение. А в обработчике ошибок хотелось бы помимо текста ошибки узнать файл и номер строки, где произошла ошибка. Ну и естественно при генерации ошибки хочется указать только текст ошибки, а передачу имени файла и номера строки возложить на плечи функции. Как бы такое сделать? |
|
Цитата:
Я думаю, что нужно как-то унаследовать стандартный Error, но чтобы номер строки и файл были приведены к единому виду независимо от браузера. И тогда можно будет просто делать triggerError(new UserError('текст ошибки')); |
Есть некроссбраузерный вариант:
alert( (new Error).stack ) |
Цитата:
В FF есть lineNumber и fileName, в IE теже свойства зовутся иначе, в хроме вообще непонятно что. А еще ведь есть куча браузеров... window.onerror ведь ловит файл и строку. Вот нужно тоже самое, только без генерации реальной ошибки, которая остановит скрипт. Нужно кроссбраузерно получить файл и строку, где был создан объект Error |
Думал прокатит, но чот нигде не заработало, хотя CustomEvent нормально диспатчится, а ErrorEvent не хочет :(
window.addEventListener("error", function (event) { console.log(event); }); function triggerError(error) { var event = new ErrorEvent(error.message, { lineno: error.lineNumber, filename: error.fileName }); window.dispatchEvent(event); } triggerError(new Error("test error")); |
в случае ошибки на клиенте скрипт не перестает работать, а консоль браузера вывалит ошибку. Там вам и текст ошибки и файл и номер строки - все есть.
Вам этой информации недостаточно или я чего-то не понимаю? |
Цитата:
|
dmitry111, он же php'шник, он наверно и не знает что в браузерах встрена консоль ошибок )
Мне ее как раз и не хватает при работе с сервером. Есть конечно и для серверов отладчики, но они какие-то кривые. |
Цитата:
|
Часовой пояс GMT +3, время: 12:35. |
|