-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
如果打算用官方demo推荐的方式就不必看了。
由于公司有自己记日志的方式,所以必须自己实现。
首先,hapi.js提供一个EventEmitter的log事件。
在需要记日志的地方,调用
server.log 或
request.log
eg.
const handler = function (request, h) {
request.log(['test', 'error'], 'Test event');
return null;
};
然后在server上注册事件监听
server.events.on({ name: 'request', channels: 'app' }, (request, event, tags) => {
if (tags.error) {
console.log(event);
}
});
server.events.on({ name: 'request', channels: 'internal' }, (request, event, tags) => {
console.log(event);
});
channel:app/internal
internel应该是服务内部的日志;
request.log记录的日志目前使用下来都是app。
通用记日志
在Request lifecycle中绑定事件。
比如,我主要是记录http请求到达和http返回响应
server.ext({
type: 'onPreHandler',
method: function (request, h) {
request.log(['begin', 'api']);
return h.continue;
},
options: {
sandbox: 'plugin'
}
})
server.ext({
type: 'onPreResponse',
method: function (request, h) {
let data = request.response.source;
request.log(['end', 'api'], data);
},
options: {
sandbox: 'plugin'
}
})
server.events.on({
name: 'request',
channels: 'app'
}, (request, event, tags) => {
if (tags.error) {
callback();//调公司通用的记日志方法
return;
}
if (tags.begin) {
callback();//调公司通用的记日志方法
} else if (tags.end) {
callback();//调公司通用的记日志方法
}
});
Metadata
Metadata
Assignees
Labels
No labels