const handleError = err => { this.emit('error', request, err); const { message, stack } = err; span.setTag(Tags.ERROR, true); span.log({ message, stack }); if (shouldWriteHead) { shouldWriteHead = false; let statusCode = 500; if (err.code === TEMPLATE_NOT_FOUND) { statusCode = 404; } span.setTag(Tags.HTTP_STATUS_CODE, statusCode); response.writeHead(statusCode, responseHeaders); // To render with custom error template if (typeof err.presentable === 'string') { response.end(`${err.presentable}`); } else { response.end(INTERNAL_SERVER_ERROR); } span.finish(); } else { contentLengthStream.end(); } }
[Tags.HTTP_STATUS_CODE]: 500 }); span.log({ message: err.message, stack: err.stack
test('log - error, but no details', setup(function (t) { const tracer = new Tracer(getAgent()) const captureError = tracer._agent.captureError tracer._agent.captureError = function () { t.fail('should not capture error if only the event log is set') } const span = tracer.startSpan() span.log({ event: 'error' }) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
// Server //> handlers app.get('/', function (req, res) { const span = tracer.startSpan("GET /"); d = Date.now() || 0 resPayload = '{"timestamp": '+ d + ',"version": "'+ config.version +'"}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
test('log - error, with string message + timestamp', setup(function (t) { const tracer = new Tracer(getAgent()) const error = 'foo' const timestamp = Date.now() - 1000 const captureError = tracer._agent.captureError tracer._agent.captureError = function (capturedError, opts) { t.equal(capturedError, error) t.deepEqual(opts, { timestamp }) } const span = tracer.startSpan() span.log({ event: 'error', message: error }, timestamp) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
app.get('/internal/ping', function (req, res) { const span = tracer.startSpan("GET /internal/ping"); resPayload = '{"response": "pong"}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
test('log - error, with error object + message + timestamp', setup(function (t) { const tracer = new Tracer(getAgent()) const error = new Error('foo') const message = 'bar' const timestamp = Date.now() - 1000 const captureError = tracer._agent.captureError tracer._agent.captureError = function (capturedError, opts) { t.equal(capturedError, error) t.deepEqual(opts, { timestamp, message }) } const span = tracer.startSpan() span.log({ event: 'error', 'error.object': error, message }, timestamp) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
app.get('/internal/hello', function (req, res) { const span = tracer.startSpan("GET /internal/hello"); resPayload = '{"Hello_Node": '+ args_app.port +'}' res.send(resPayload); span.log({ res: resPayload }); span.finish(); });
test('log - error, with string message', setup(function (t) { const tracer = new Tracer(getAgent()) const error = 'foo' const captureError = tracer._agent.captureError tracer._agent.captureError = function (capturedError, opts) { t.equal(capturedError, error) t.deepEqual(opts, { timestamp: undefined }) } const span = tracer.startSpan() span.log({ event: 'error', message: error }) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
test('log - error, with error object', setup(function (t) { const tracer = new Tracer(getAgent()) const error = new Error('foo') const captureError = tracer._agent.captureError tracer._agent.captureError = function (capturedError, opts) { t.equal(capturedError, error) t.deepEqual(opts, { timestamp: undefined, message: undefined }) } const span = tracer.startSpan() span.log({ event: 'error', 'error.object': error }) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
test('log - error, with error object + timestamp', setup(function (t) { const tracer = new Tracer(getAgent()) const error = new Error('foo') const timestamp = Date.now() - 1000 const captureError = tracer._agent.captureError tracer._agent.captureError = function (capturedError, opts) { t.equal(capturedError, error) t.deepEqual(opts, { timestamp, message: undefined }) } const span = tracer.startSpan() span.log({ event: 'error', 'error.object': error }, timestamp) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))