рдореИрдВ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрди рд▓реЙрдЧ рдХреЙрд▓ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП @ рд╕рдВрддрд░реА/рдиреЛрдб рдПрдХреАрдХрд░рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
@sentry/node
4.3.0
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрддрд░реА рдореЗрдВ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХрд░рдг рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ:
рд▓рд┐рдВрдХ: рдЖрдпрд╛рдд рдирд╛рдо: рд╕рдВрддрд░реАред рдПрдХреАрдХрд░рдгред рдХрдВрд╕реЛрд▓Con
рд╣рдо рдЗрд╕реЗ рдмрдирдпрди рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЗ рд▓рд┐рдП рднреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
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!');
рдкреАрдПрд╕ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрдирд┐рдпрди-рд╕реЗрдВрдЯреНрд░реА-рд╕реНрдЯреНрд░реАрдо рдХреА рдХреЛрд╢рд┐рд╢ рдХреА @ рд╕рдВрддрд░реА/рдиреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА
рддреЛ рд▓рд┐рдВрдХ: https://stackoverflow.com/questions/53310580/sentry-node-integration-to-wrap-bunyan-log-calls-as-breadcrumbs
https://docs.sentry.io/enriching-error-data/breadcrumbs/?platform=browser + рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА SO рдкрд░ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ:
var log = bunyan.createLogger({
name: 'myapp',
streams: [{
level: 'debug',
stream: {
write: function(record) {
Sentry.addBreadcrumb({
message: record.msg,
level: record.level
});
}
}]
});
рдореВрд▓ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред
рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд░рд╛рдЗрдЯреЗрдмрд▓рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдорд╕реНрдпрд╛рдПрдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд░рд╛рдЗрдЯреЗрдмрд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд:
level: Sentry.Severity.fromString(nameFromLevel[chunk.level])
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛// 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();
},
}),
});
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
https://docs.sentry.io/enriching-error-data/breadcrumbs/?platform=browser + рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА SO рдкрд░ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ: