diff --git a/core/base-service/check-error-response.js b/core/base-service/check-error-response.js index bc0d0a1ae11614fab9041b7163e3a1644e4c710e..beceeecc7bfd867c37ab68aa5b3a6bdfd158f61f 100644 --- a/core/base-service/check-error-response.js +++ b/core/base-service/check-error-response.js @@ -6,6 +6,8 @@ const defaultErrorMessages = { 429: 'rate limited by upstream service', } +const headersToInclude = ['cf-ray'] + export default function checkErrorResponse(httpErrors = {}, logErrors = [429]) { return async function ({ buffer, res }) { let error @@ -28,7 +30,17 @@ export default function checkErrorResponse(httpErrors = {}, logErrors = [429]) { } if (logErrors.includes(res.statusCode)) { - log.error(new Error(`${res.statusCode} calling ${res.requestUrl.origin}`)) + const tags = {} + for (const headerKey of headersToInclude) { + const headerValue = res.headers[headerKey] + if (headerValue) { + tags[`header-${headerKey}`] = headerValue + } + } + log.error( + new Error(`${res.statusCode} calling ${res.requestUrl.origin}`), + tags, + ) } if (error) { diff --git a/core/base-service/check-error-response.spec.js b/core/base-service/check-error-response.spec.js index 411008dfd6fd07b7b38953b3ade6dec53096cc70..d5479d8b594ab9815d4bd6e717b9154bc9263a2d 100644 --- a/core/base-service/check-error-response.spec.js +++ b/core/base-service/check-error-response.spec.js @@ -47,7 +47,11 @@ describe('async error handler', function () { context('when status is 429', function () { const buffer = Buffer.from('some stuff') - const res = { statusCode: 429, requestUrl: new URL('https://example.com/') } + const res = { + statusCode: 429, + headers: { 'some-key': 'some-value' }, + requestUrl: new URL('https://example.com/'), + } it('throws InvalidResponse', async function () { try { diff --git a/core/server/log.js b/core/server/log.js index d571863ad7f42218839ad0749324afaea53182db..268bffdfa2ac05f36a77dec89d9a0be2f3b3f1df 100644 --- a/core/server/log.js +++ b/core/server/log.js @@ -28,10 +28,12 @@ const log = (...msg) => { console.log(d, ...msg) } -const error = err => { +const error = (err, tags) => { const d = date() listeners.forEach(f => f(d, err)) - Sentry.captureException(err) + Sentry.captureException(err, { + tags, + }) console.error(d, err) }