2017-12-15 2 views
1

Ich versuche, eine Sentry-Installation zum Abfangen der Fehler in meiner App bereitzustellen, und irgendwie verstehe ich nicht wirklich, wie das geht.Sentry erfasst nicht alle Fehler in einer Nodejs-Umgebung

Ich habe dieses Beispiel-App:

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); 
}); 

Sentry Protokolle perfekt die Fehler auf der / Route aber nichts auf der /KO Route. Ich möchte es alle Fehler protokollieren, die in der Knotenkonsole angezeigt werden können, ohne zu verwenden.

Wie mache ich das?

Antwort

0

Platzieren Sie die app.use Linien nach allen Routen, insbesondere die onError Handler. Die systemeigene Fehlerbehandlung des Knotens fängt sie möglicherweise vor Sentry ab.

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'); 
}); 

Offenlegung: Ich arbeite bei Sentry, aber ich betreibe unser unser Node SDK nicht. Bitte öffnen Sie ein Problem im Knoten Repo, wenn Sie eine ausführlichere Antwort wünschen.

Verwandte Themen