如何使哈皮好忽略一个特定的路线

时间:2015-09-28 19:02:58

标签: javascript hapijs

我希望能够很好地忽略特定路线的记录,因为亚马逊每隔几秒就会检查一次健康检查路线 - 这只会给我们的日志增加噪音。

我是否可以为好的插件设置特定于路由的配置,以便它只忽略一条特定的路由?

3 个答案:

答案 0 :(得分:3)

有可能做到。这是文档https://github.com/hapijs/good/blob/master/API.md#stream-transforms-using-plugin-configs

Hapi路线配置

var routeConfig = {
    plugins: {
        good: {
            suppressResponseEvent: true
        }
    }
};

server.route({
    method: '*',
    path: '/suscribe/{path*}',
    handler: function(req, rep){
            rep("OK!");
    },
    config: routeConfig
});

良好创建自定义过滤器。您需要创建一个新的npm包。 对于此示例,我们将其命名为 good-filter 遵循https://github.com/hapijs/good-squeeze/的架构 主文件(index.js)包含:

'use strict';

 module.exports = {
     Filter: require("./filter.js")
 };

加载良好时,此套餐必须可用。 以下代码进入 good-filter 包中的 filter.js

'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;

最后,将您的过滤器添加到良好配置中。

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']
    }
};

答案 1 :(得分:3)

这至少与hapi 16.1,good 7.1和good-squeeze 5.0一致。我们的想法是标记运行状况检查路由的日志记录,然后使用good-squeeze排除该路由。

配置good / good-squeeze以排除“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',
      ],
    },
  },
});

然后标记您的路线:

server.route({
  method: 'GET',
  path: '/admin/ok',
  handler: (request, reply) => reply('ok'),
  config: {
    tags: ['health'],
  },
});

答案 2 :(得分:0)

我认为您正在考虑忽略{I} {0}}日志记录,据我所知,该日志记录不可配置。对于其他日志记录,您可以通过使用标记来过滤事件。

以下内容:

response

生成以下输出:

  var someData = {foo:'bar'};
  request.log('myTag', someData);

以下150928/224019.555, [request,myTag], data: {"foo":"bar"} 选项会选择这个:

good