I'd like to have good ignore logging for a a specific route since it's a health check route gets polled by amazon every few seconds - it just adds noise to our logs.
Is there route specific configuration I can set for the good plugin so that it just ignores a single specific route?
Here’s something that works at least with hapi 16.1, good 7.1, and good-squeeze 5.0. The idea is to tag the health check route’s logging, and then exclude that route with good-squeeze.
Configuring good/good-squeeze to exclude “health”:
server.register({
  register: Good,
  options: {
    reporters: {
      console: [
        {
          module: 'good-squeeze',
          name: 'Squeeze',
          args: [
            {
              // keep health checks from appearing in logs
              response: { exclude: 'health' },
              log: '*',
            },
          ],
        },
        {
          module: 'good-console',
        },
        'stdout',
      ],
    },
  },
});
And then tag your route:
server.route({
  method: 'GET',
  path: '/admin/ok',
  handler: (request, reply) => reply('ok'),
  config: {
    tags: ['health'],
  },
});
It is possible to do. Here is the documentation https://github.com/hapijs/good/blob/master/API.md#stream-transforms-using-plugin-configs
Hapi route configuration
var routeConfig = {
    plugins: {
        good: {
            suppressResponseEvent: true
        }
    }
};
server.route({
    method: '*',
    path: '/suscribe/{path*}',
    handler: function(req, rep){
            rep("OK!");
    },
    config: routeConfig
});
Creating a custom filter for good. You will need to create a new npm package. For this example, we are going to name it good-filter Follow the architecture from https://github.com/hapijs/good-squeeze/ The main file (index.js) contains:
'use strict';
 module.exports = {
     Filter: require("./filter.js")
 };
This package must be available when good is loading. The following code goes into filter.js in the good-filter package.
'use strict';
const Stream = require('stream');
class Filter extends Stream.Transform {
    constructor(options) {
        options = Object.assign({}, options, {
            objectMode: true
        });
        super(options);
    }
    _transform(data, enc, next) {
        if (data.event === 'response' && data.config.suppressResponseEvent === true) {
            return next();
        }
        return next(null, data);
    }
}
module.exports = Filter;
Finally, add your filter to good configuration.
const options = {
    ops: {
        interval: 1000
    },
    reporters: {
        myConsoleReporter: [{
            module: 'good-squeeze',
            name: 'Squeeze',
            args: [{ log: '*', response: '*' }]
        }, 
        {
            module: 'good-filter',
            name: 'Filter',
            args: [{ log: '*', response: '*' }]
        },
        {
            module: 'good-console'
        }, 'stdout']
    }
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With