【问题标题】:how to make hapi good ignore a specific route如何让hapi好忽略特定路线
【发布时间】:2017-07-18 00:32:27
【问题描述】:

我希望对特定路线进行良好的忽略日志记录,因为它是一条健康检查路线,亚马逊每隔几秒就会轮询一次 - 它只会给我们的日志增加噪音。

我可以为好的插件设置路由特定配置,以便它忽略单个特定路由吗?

【问题讨论】:

    标签: javascript hapijs


    【解决方案1】:

    这至少适用于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】:

      这是可以做到的。这是文档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
      });
      

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

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

      good 正在加载时,此包必须可用。 以下代码进入 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;
      

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

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

      【讨论】:

        【解决方案3】:

        我假设您正在考虑忽略 response 日志记录,据我所知这是不可配置的。对于其他日志记录,您可以使用标签过滤事件。

        以下内容:

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

        生成以下输出:

        150928/224019.555, [request,myTag], data: {"foo":"bar"}
        

        以下good 选项会选择此选项:

        var loggingOpts = {
          reporters: [{
            reporter: require('good-console'),
            events: { request: 'myTag' }
          }]
        };
        

        【讨论】:

          猜你喜欢
          • 2019-12-17
          • 2013-03-21
          • 2013-06-16
          • 1970-01-01
          • 2015-10-25
          • 2012-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多