diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e26253f..9f554ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: contents: read strategy: matrix: - node-version: [14, 16, 18] + node-version: [18, 20, 21] steps: - name: Check out repo uses: actions/checkout@v4 diff --git a/logger.js b/logger.js index d6da55b..bca8c77 100644 --- a/logger.js +++ b/logger.js @@ -260,7 +260,7 @@ function defaultFailedRequestMessageProvider () { function defaultSuccessfulRequestMessageProvider (req, res) { /* istanbul ignore next */ - return res.writableEnded ? 'request completed' : 'request aborted' + return !req.readableAborted && res.writableEnded ? 'request completed' : 'request aborted' } module.exports = pinoLogger diff --git a/test/test.js b/test/test.js index 5ffc450..9169da0 100644 --- a/test/test.js +++ b/test/test.js @@ -517,6 +517,35 @@ test('log requests aborted during payload', { skip: true }, function (t) { }) }) +test('log requests aborted on the server', function (t) { + const dest = split(JSON.parse) + const logger = pinoHttp(dest) + + function handle (req, res) { + logger(req, res) + + req.destroy() + res.end() + } + + function listen (err, server) { + t.error(err) + const client = doGet(server) + + client.on('error', function () { + // skip error + }) + } + + setup(t, logger, listen, handle) + + dest.on('data', function (line) { + t.ok(line.responseTime >= 0, 'responseTime is defined') + t.equal(line.msg, DEFAULT_REQUEST_ABORTED_MSG, 'message is set') + t.end() + }) +}) + test('no auto logging with autoLogging set to false', function (t) { const dest = split(JSON.parse) const logger = pinoHttp({ autoLogging: false }, dest)