diff --git a/logger.js b/logger.js index 205fe82..3d9a077 100644 --- a/logger.js +++ b/logger.js @@ -28,16 +28,16 @@ function pinoLogger (opts, stream) { return loggingMiddleware function onResFinished (err) { - this.removeListener('finish', onResFinished) this.removeListener('error', onResFinished) + this.removeListener('finish', onResFinished) var log = this.log var responseTime = Date.now() - this[startTime] - if (err) { + if (err || this.err || this.statusCode >= 500) { log.error({ res: this, - err: err, + err: err || this.err || new Error('failed with status code' + this.statusCode), responseTime: responseTime }, 'request errored') return diff --git a/test.js b/test.js index feeed0b..a17a5d0 100644 --- a/test.js +++ b/test.js @@ -206,6 +206,22 @@ test('responseTime for errored request', function (t) { var dest = split(JSON.parse) var logger = pinoHttp(dest) + function handle (req, res) { + logger(req, res) + setTimeout(function () { + res.err = new Error('Some error') + res.emit('finished') + res.end() + }, 100) + } + + expectResponseTime(t, dest, logger, handle) +}) + +test('responseTime for request emitting error event', function (t) { + var dest = split(JSON.parse) + var logger = pinoHttp(dest) + function handle (req, res) { logger(req, res) setTimeout(function () {