diff --git a/README.md b/README.md index 9096bd9..29d3fae 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,12 @@ events"](#hapievents) section. When enabled, responses with status codes in the 400-500 range will have the value returned by the hapi lifecycle method added to the `response` event log as `err`. +### `options.logResponsePayload: boolean` + + **Default**: `false` + + When enabled, add the response returned value (Hapi `request.response.source`) as `responsePayload` to the `response` event log. + ### `options.logRequestStart: boolean | (Request) => boolean` **Default**: false diff --git a/index.js b/index.js index dd570d0..66c0aa3 100644 --- a/index.js +++ b/index.js @@ -191,6 +191,7 @@ async function register (server, options) { tags: options.logRouteTags ? request.route.settings.tags : undefined, err: options.log4xxResponseErrors && (statusCode >= 400 && statusCode < 500) ? request.response.source : undefined, res: request.raw.res, + responsePayload: options.logResponsePayload && request.response && request.response.source !== undefined ? request.response.source : undefined, responseTime }, requestCompleteMessage(request, responseTime) diff --git a/test.js b/test.js index e7c1ab4..20a3c58 100644 --- a/test.js +++ b/test.js @@ -1587,6 +1587,60 @@ experiment('options.logRequestComplete', () => { }) }) +experiment('options.logResponsePayload', () => { + test('when options.logResponsePayload is true, the response returned value should be added to the log as "responsePayload"', async () => { + const server = getServer() + + let done + + const finish = new Promise(function (resolve, reject) { + done = resolve + }) + + server.route({ + path: '/', + method: 'GET', + handler: async (req, h) => { + return { foo: 100 } + } + }) + + await registerWithOptionsSink(server, { level: 'info', logResponsePayload: true }, data => { + expect(data.responsePayload).to.be.equals({ foo: 100 }) + done() + }) + + await server.inject('/') + await finish + }) + + test('when options.logResponsePayload is omitted, "responsePayload" should not be added to the response event log', async () => { + const server = getServer() + + let done + + const finish = new Promise(function (resolve, reject) { + done = resolve + }) + + server.route({ + path: '/', + method: 'GET', + handler: async (req, h) => { + return { foo: 101 } + } + }) + + await registerWithOptionsSink(server, { level: 'info' }, data => { + expect(data.responsePayload).to.be.undefined() + done() + }) + + await server.inject('/') + await finish + }) +}) + experiment('logging with mergeHapiLogData option enabled', () => { test("log event data is merged into pino's log object", async () => { const server = getServer()