2015-09-28 11 views
5

Mi piacerebbe avere una buona ignorare la registrazione per un percorso specifico poiché si tratta di un percorso di controllo sanitario che viene prelevato da Amazon ogni pochi secondi: aggiunge solo rumore ai nostri registri.come fare hapi good ignora un percorso specifico

C'è una configurazione specifica del percorso che posso impostare per il buon plug-in in modo che ignori solo un singolo percorso specifico?

risposta

0

Suppongo che stiate ignorando la registrazione response che non è configurabile per quanto ne so. Per gli altri registri è possibile filtrare gli eventi tramite l'uso di tag.

il seguente:

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

genera il seguente output:

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

Il seguente good opzioni sarebbe prendere questo:

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

E 'possibile fare. Ecco la documentazione https://github.com/hapijs/good/blob/master/API.md#stream-transforms-using-plugin-configs

Hapi configurazione percorso

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

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

Creazione di un filtro personalizzato per buona. Dovrai creare un nuovo pacchetto npm. Per questo esempio, ci accingiamo a nominarlo buon filtro Seguire l'architettura da https://github.com/hapijs/good-squeeze/ Il file principale (index.js) contiene:

'use strict'; 

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

Questo pacchetto deve essere disponibile quando buona sta caricando. Il codice seguente va in filter.js nel buon filtro pacchetto.

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

Infine, aggiungere il filtro per buona configurazione.

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

Ecco qualcosa che funziona, almeno con hapi 16.1, good 7.1 e 5.0 good-squeeze. L'idea è di taggare la registrazione del percorso di controllo dello stato, quindi escludere tale percorso con good-squeeze.

Configurazione good/good-squeeze per escludere “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', 
     ], 
    }, 
    }, 
}); 

E poi etichettare il vostro percorso:

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

Miglior risposta finora, grazie! – victorkohl