【发布时间】:2017-07-18 00:32:27
【问题描述】:
我希望对特定路线进行良好的忽略日志记录,因为它是一条健康检查路线,亚马逊每隔几秒就会轮询一次 - 它只会给我们的日志增加噪音。
我可以为好的插件设置路由特定配置,以便它忽略单个特定路由吗?
【问题讨论】:
标签: javascript hapijs
我希望对特定路线进行良好的忽略日志记录,因为它是一条健康检查路线,亚马逊每隔几秒就会轮询一次 - 它只会给我们的日志增加噪音。
我可以为好的插件设置路由特定配置,以便它忽略单个特定路由吗?
【问题讨论】:
标签: javascript hapijs
这至少适用于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'],
},
});
【讨论】:
这是可以做到的。这是文档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']
}
};
【讨论】:
我假设您正在考虑忽略 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' }
}]
};
【讨论】: