2017-03-07 1 views
0

처리되지 않은 것뿐만 아니라 처리 된 모든 Javascript 예외를 서버에 보내려고합니다. 이 문제에 대해 알려주는 window.onerror documentationalso this post을 살펴 보았지만 처리되지 않은 예외에 대해서만 가장 잘 작동합니다.처리되지 않은 처리되지 않은 처리 된 Javascript 오류를 서버에 보냅니다.

window.onerror 예외가 이미 catch() 블록에서 처리되는 경우 시작되지 않습니다.

'고통스러운'방법은 내 logToServer() 기능을 내 코드의 catch() 블록에 수동으로 첨부하는 것이지만 더 나은 솔루션을 기대합니다.

아래에 약간의 스 니펫을 설정했습니다.

var logToServer = function logToServer() { 
 
    console.info('logToServer() called'); 
 
}; 
 
window.onerror = function(z, x, c, v, b) { 
 
    console.info(z); 
 
    console.info(x); 
 
    console.info(c); 
 
    console.info(v); 
 
    console.info(b); 
 

 
    // call a function to send to server 
 
    logToServer(); 
 
}; 
 
window.addEventListener('error', function(z, x, c, v, b) { 
 
    console.info(z); 
 

 
    // call a function to send to server 
 
    logToServer(); 
 
}); 
 

 
// test w/o catch-block 
 
//console.info(err); // calls logToServer() 
 

 
// test w/ catch-block 
 
try { 
 
    console.info(asd); // does not call logToServer() 
 
} catch (err) { 
 
    console.error(err); 
 
};
Enable logs in console.

+0

처리 된 예외의 경우 로직을 수행 한 다음 끝에 catch 블록에서 예외를 던집니다. –

+0

왜? 어느 것이 든 * try ... catch *를 사용하면 피할 수없는 오류를 처리 할 수 ​​있습니다. 그런 다음 이러한 오류는 *로 처리됩니다 (오류가 많은 곳이 없어야 함). 아니면 엉터리/버그가있는 코드를 처리하고 사용자가 이러한 오류나 그 결과를 보지 못하도록 * try .. catch *를 사용하십시오. 이 경우 이러한 오류를 포착하지 말고 오류를 일으키는 코드를 수정하십시오. 그래서 다시, 왜 당신은 수동적으로 로깅을 추가하는 것이 번거롭다는 것을 코드에서 너무 많은 try ... catch 블록을 가지고 있습니까? 그리고 왜 이미 처리 된 모든 오류 (서버 측)를 기록하고 싶습니까? – Thomas

+0

@MuhammadQasim - 모든 catch 블록을 수동으로 편집하고 예외가 발생하면 내 논리를 호출하는 것을 의미합니까? 나는 그것을 할 수 있지만 모든 catch 블록을 방문하는 것은 잔인한 것처럼 보입니다. 장래에 새로운 try catch 블록이 항상 내 server-logging-logic-function을 호출해야한다는 것을 보장해야 할 필요는 없습니다. 다른 의미 있니? – Rodiwa

답변

0

window.onerror 발광 전용 예외 처리되지 않은 경우. 예외를 잡으면이 이벤트가 발생하지 않습니다. 모든 try - catch 블록에서 명시 적으로해야 할 것입니다. catch 블록에서는 예외를 throw해야합니다. 구문은 간단합니다 :

관련 문제