diff --git a/index.js b/index.js index 701214b..e581353 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ 'use strict' const pino = require('pino') +const nullLogger = require('abstract-logging') const levels = ['trace', 'debug', 'info', 'warn', 'error'] const levelTags = { @@ -49,6 +50,13 @@ async function register (server, options) { throw new Error('invalid tag levels') } + var ignoreTable = {} + if (options.ignorePaths) { + for (let i = 0; i < options.ignorePaths.length; i++) { + ignoreTable[options.ignorePaths[i]] = true + } + } + const mergeHapiLogData = options.mergeHapiLogData // expose logger as 'server.logger()' @@ -56,6 +64,10 @@ async function register (server, options) { // set a logger for each request server.ext('onRequest', (request, h) => { + if (options.ignorePaths && ignoreTable[request.url.path]) { + request.logger = nullLogger + return h.continue + } request.logger = logger.child({ req: request }) return h.continue }) diff --git a/package.json b/package.json index 032c6b5..4db8bd3 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "standard": "^10.0.3" }, "dependencies": { + "abstract-logging": "^1.0.0", "pino": "^4.10.0" }, "repository": { diff --git a/test.js b/test.js index d53728c..3103ac7 100644 --- a/test.js +++ b/test.js @@ -612,7 +612,7 @@ experiment('uses a prior pino instance', () => { } await server.register(plugin) - server.logger().info({foo: 'bar'}, 'hello world') + server.logger().info({ foo: 'bar' }, 'hello world') await finish }) }) @@ -789,3 +789,39 @@ experiment('logging with request payload', () => { await done }) }) + +experiment('ignore request logs for paths in ignorePaths', () => { + test('when path matches entry in ignorePaths, nothing should be logged', async () => { + const server = getServer() + let resolver + const done = new Promise((resolve, reject) => { + resolver = resolve + }) + const stream = sink((data) => { + expect(data.req.url).to.not.equal('/ignored') + resolver() + }) + const logger = require('pino')(stream) + const plugin = { + plugin: Pino, + options: { + instance: logger, + ignorePaths: ['/ignored'] + } + } + + await server.register(plugin) + + await server.inject({ + method: 'PUT', + url: '/ignored' + }) + + await server.inject({ + method: 'PUT', + url: '/' + + }) + await done + }) +})