반응형
모든 JavaScript 오류를 포착하여 서버로 전송
자바스크립트 오류를 글로벌하게 처리하여 클라이언트 브라우저에서 서버로 전송한 경험이 있는 사람이 있는지 궁금했습니다.
클라이언트 측에서 발생하는 예외, 오류, 컴파일 오류 등을 모두 파악하여 서버로 전송하여 보고하고 싶습니다.
저는 주로 MoTools를 사용하고 있고head.js
(JS측의 경우) 및 서버측의 경우 Django를 사용합니다.
window.on error를 체크해 보겠습니다.
예:
window.onerror = function(message, url, lineNumber) {
//save error and send to server for example.
return true;
};
true를 반환하면 기본 핸들러가 실행되지 않으며 false를 반환하면 기본 핸들러가 실행됩니다.
웹 사이트에서 Google Analytics를 사용하는 경우 다음 작업을 수행할 수 있습니다.
window.onerror = function(message, source, lineno, colno, error) {
if (error) message = error.stack;
ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}
상기 코드에 대한 코멘트:
- 최신 브라우저에서는 풀 스택트레이스가 기록됩니다
- 스택 트레이스를 캡처하지 않는 오래된 브라우저의 경우 오류 메시지가 기록됩니다.(제 경험상 가장 오래된 iOS 버전입니다).
- 사용자의 브라우저 버전도 기록되므로 어떤 OS/브라우저 버전이 어떤 오류를 발생시키고 있는지 확인할 수 있습니다.이를 통해 버그 우선순위 부여 및 테스트가 간소화됩니다.
- 이 코드는 Google Analytics를 "analytics.js"와 함께 사용하면 작동합니다.이와 같이 "gtag.js"를 대신 사용하는 경우 함수의 마지막 줄을 조정해야 합니다.자세한 내용은 여기를 참조해 주세요.
코드가 배치되면 사용자의 Javascript 오류를 볼 수 있습니다.
- Google Analytics에서
Behavior
섹션과 그 다음에Top Events
보고합니다. - 이벤트 카테고리의 리스트가 표시됩니다.클릭
window.onerror
목록에 있습니다. - Javascript 스택 트레이스 및 오류 메시지 목록이 나타납니다.를 클릭하여 사용자의 OS/브라우저 버전 보고서에 열을 추가합니다.
Secondary dimension
버튼과 입력Event Label
텍스트 상자에 표시됩니다. - 리포트는 아래의 스크린샷과 같습니다.
- OS/브라우저 문자열을 보다 인간적인 설명으로 변환하려면 https://developers.whatismybrowser.com/useragents/parse/에 복사하여 저장합니다.
서드파티 서비스를 이용하려고 하지 말고 자신의 서비스를 이용하세요.
에러 핸들러는, 다음의 시나리오를 검출할 수 있습니다.
- 수집되지 않은 유형 오류를 캡처할 수 없습니다.
- 수집되지 않은 ReferenceError를 캡처할 수 없습니다(예: var.click()).
- TypeError를 캡처할 수 있습니다.
- 구문 오류를 캡처할 수 있습니다.
- ReferenceError를 캡처할 수 있습니다.
Javascript 오류를 캐치하려면:
window.addEventListener('error', function (e) {
//It Will handle JS errors
})
AngularJS 오류를 캡처하려면:
app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
return function (exception, cause) {
//It will handle AngualarJS errors
}
})
})
언급URL : https://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and-send-them-to-server
반응형
'sourcecode' 카테고리의 다른 글
플러그인 'org.springframework'입니다.boot: spring-boot-maven-boot:'를 찾을 수 없음 (0) | 2022.11.16 |
---|---|
PHP 도메인 이름 가져오기 (0) | 2022.11.16 |
MySQL 테이블을 변경하여 열에 주석을 추가합니다. (0) | 2022.11.16 |
Flask 뷰에서 JSON 응답 반환 (0) | 2022.11.16 |
Android 5.0 - Recycleer View에 머리글/바닥글 추가 (0) | 2022.11.07 |