Сегодня я нахожу необходимость отследить и получить трассировку стека ошибок Javascript для их решения.
Сегодня мы смогли перехватить все остальные вызовы, идея состоит в том, что, как только вы получите ошибку, она автоматически публикует трассировку стека этой ошибки плюс ответы остальных сохраненных сервисов, чтобы мы могли обнаруживать, воспроизводить и решать проблемы практически идентично окружающая среда/положение.
В качестве требования нас попросили сделать модуль, который можно было бы включить без навязчивости, например: Включение модуля, который содержит логику хука в одном JS, будет неинвазивным, включение нескольких строк кода в различные JS файлы будет инвазивным.
Цель состоит в том, чтобы создать инструмент, который можно включить в уже разработанную систему, и отслеживать события ошибок (например, консоль).
Я читал об этой логике трекера:
- errorception.com/
- trackjs.com/
- atatus.com/
- airbrake.io/
- jslogger.com/
- getsentry.com/
- muscula.com/
- debuggify.net/
- raygun.io/home
Нам нужно сделать что-то подобное, отследить ошибку и отправить ее на наш сервер.
Как говорит "Dagg Nabbit"..."Трудно получить трассировку стека по ошибкам, которые происходят прямо сейчас"
Итак, у нас есть много платных продуктов, но как они действительно работают?
В Airbrake они используют stacktrace и window.onerror:
window.onerror = function(message, file, line) {
setTimeout(function() {
Hoptoad.notify({
message : message,
stack : '()@' + file + ':' + line
});
}, 100);
return true;
};
Но я не могу понять, когда реально использовалась трассировка стека.
В какой-то момент stacktrace, raven.js и другие трекеры нуждаются в try/catch.
- что произойдет, если мы найдем способ создать глобальную оболочку?
- Можем ли мы просто вызвать трассировку стека и дождаться улова?
Как я могу отправить трассировку стека на мой сервер, когда на клиенте возникает непредвиденная ошибка? Любой совет или хорошие практики?