2017-12-15 14 views
1

내 응용 프로그램에서 오류를 포착하기 위해 보초 설치를 배포하려고하는데 어떻게 든 그 일을 실제로 이해하지 못합니다. 완벽하게Sentry가 nodejs 환경의 모든 오류를 포착하지 못합니다.

const express = require('express'); 
const app = express(); 
var Raven = require('raven'); 
Raven.config('http://[email protected]/7').install(); 
app.use(Raven.requestHandler()); 

app.get('/', function mainHandler(req, res) { 
     throw new Error('Broke!'); 
}); 
app.use(Raven.errorHandler()); 
app.use(function onError(err, req, res, next) { 
    res.statusCode = 500; 
    res.end(res.sentry + '\n'); 
}); 

const PORT = process.env.PORT || 443; 

app.listen(PORT,() => { 
    console.log(`Server is listening on port ${PORT}`); 
}); 

app.get('/OK', (req, res, next) => { 
    res.send('route OK'); 
}); 

app.get('/KO', (req, res, next) => { 
    res.send(blabla); 
}); 

센트리로부터 로그 /KO 경로에 / 경로하지만 아무것도에 오류 :

나는이 샘플 응용 프로그램을 가지고있다. throw error을 사용하지 않고 노드 콘솔에 나타날 수있는 모든 오류를 기록하도록하고 싶습니다.

어떻게하면됩니까?

답변

0

모든 경로 뒤에 app.use 행을 배치하십시오. 특히 onError 처리기를 배치하십시오. 노드의 원시 오류 처리가 Sentry 's 전에 그것을 잡을 수 있습니다.

const express = require('express'); 
const app = express(); 
var Raven = require('raven'); 
Raven.config('http://[email protected]/7').install(); 
app.use(Raven.requestHandler()); 

app.get('/', function mainHandler(req, res) { 
     throw new Error('Broke!'); 
}); 
const PORT = process.env.PORT || 443; 

app.listen(PORT,() => { 
    console.log(`Server is listening on port ${PORT}`); 
}); 

app.get('/OK', (req, res, next) => { 
    res.send('route OK'); 
}); 

app.get('/KO', (req, res, next) => { 
    res.send(blabla); 
}); 

app.use(Raven.errorHandler()); 
app.use(function onError(err, req, res, next) { 
    res.statusCode = 500; 
    res.end(res.sentry + '\n'); 
}); 

공개 : 나는 Sentry에서 일하지만 우리 Node SDK를 유지 관리하지 않습니다. 보다 자세한 답변을 원하면 노드 저장소에서 문제를여십시오.