Wie kann ich eine @sentry/node-Integration vornehmen, um Bunyan-Protokollaufrufe als Breadcrumbs zu verpacken?
@sentry/node
4.3.0
Sentry hat standardmäßig eine Integration für console.log , um es zu einem Teil von Breadcrumbs zu machen:
Link: Importname: Sentry.Integrations.Console
Wie können wir es auch für den Bunyan-Logger zum
const koa = require('koa');
const app = new koa();
const bunyan = require('bunyan');
const log = bunyan.createLogger({
name: 'app',
..... other settings go here ....
});
const Sentry = require('@sentry/node');
Sentry.init({
dsn: MY_DSN_HERE,
integrations: integrations => {
// should anything be handled here & how?
return [...integrations];
},
release: 'xxxx-xx-xx'
});
app.on('error', (err) => {
Sentry.captureException(err);
});
// I am trying all to be part of sentry breadcrumbs
// but only console.log('foo'); is working
console.log('foo');
log.info('bar');
log.warn('baz');
log.debug('any');
log.error('many');
throw new Error('help!');
PS Ich habe bunyan-sentry-stream bereits ausprobiert, aber kein Erfolg mit @sentry/node , es schiebt nur Einträge, anstatt sie als Breadcrumbs zu behandeln.
https://docs.sentry.io/enriching-error-data/breadcrumbs/?platform=browser + wie jemand bereits auf der SO geantwortet hat:
var log = bunyan.createLogger({
name: 'myapp',
streams: [{
level: 'debug',
stream: {
write: function(record) {
Sentry.addBreadcrumb({
message: record.msg,
level: record.level
});
}
}]
});
Ursprüngliche Frage wurde beantwortet. Fühlen Sie sich frei, wieder zu öffnen, wenn Sie noch weitere Fragen haben.
Wenn Sie Typskript verwenden, können Compilerprobleme auftreten, wenn Sie im obigen Beispiel keinen WriteableStream bereitstellen. Daher können Sie den Writeable-Konstruktor wie unten beschrieben verwenden.
Zusätzlich:
level: Sentry.Severity.fromString(nameFromLevel[chunk.level])
umwandeln// if you want some stronger typing around the bunyan log entry
interface BunyanChunk {
pid?: number;
level: number;
msg: string
// ... hostname?: string;
[custom: string]: unknown;
}
const appLogger = Bunyan.createLogger();
appLogger.addStream({
level: 'debug',
// use the Writable constructor and pass a write function
stream: new Writable({
write(c: string, encoding, next) {
const chunk: BunyanChunk = JSON.parse(c);
Sentry.addBreadcrumb({
message: chunk.msg,
// convert from a Bunyan level to a Sentry Severity
level: Sentry.Severity.fromString(Bunyan.nameFromLevel[chunk.level]),
});
next();
},
}),
});
Hilfreichster Kommentar
https://docs.sentry.io/enriching-error-data/breadcrumbs/?platform=browser + wie jemand bereits auf der SO geantwortet hat: