Node.js 如何在hapi.js服务器中编写类似Apache的访问日志
我刚接触过hapijs,做了一个简单的服务器。现在我想编写一个类似apache的access.log。最好的方法是什么Node.js 如何在hapi.js服务器中编写类似Apache的访问日志,node.js,hapijs,Node.js,Hapijs,我刚接触过hapijs,做了一个简单的服务器。现在我想编写一个类似apache的access.log。最好的方法是什么 我可以只使用hapijs服务器来完成这项工作吗?还是最好尝试集成winston来完成这项工作?如果第二个更好,您是否知道如何将其集成。最简单的方法是将模块与报告器一起使用。下面是一个如何使用它的示例: var Hapi = require('hapi'); var Good = require('good'); var server = new Hapi.Server();
我可以只使用hapijs服务器来完成这项工作吗?还是最好尝试集成winston来完成这项工作?如果第二个更好,您是否知道如何将其集成。最简单的方法是将模块与报告器一起使用。下面是一个如何使用它的示例:
var Hapi = require('hapi');
var Good = require('good');
var server = new Hapi.Server();
server.connection({ port: 8080 });
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('Hello, world!');
}
});
server.route({
method: 'GET',
path: '/{name}',
handler: function (request, reply) {
reply('Hello, ' + encodeURIComponent(request.params.name) + '!');
}
});
server.register({
register: Good,
options: {
reporters: [{
reporter: require('good-apache-log'),
events: {
response: '*',
log: '*'
},
config: {
path: '/var/log/hapi',
rotate: 'daily'
}
}]
}
}, function (err) {
if (err) {
throw err; // something bad happened loading the plugin
}
server.start(function () {
server.log('info', 'Server running at: ' + server.info.uri);
});
});
要获得类似于Apache访问日志的内容,您可以使用和reporter并记录所有
响应
事件:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
var options = {
reporters: [
{
reporter: require('good-file'),
events: { response: '*' },
config: 'access.log' // The file to log to
}
]
};
server.register([
{
register: require('good'),
options: options
}
],
function (err) {
if (err) {
throw err;
}
server.start(function (err) {
if (err) {
throw err;
}
console.log('Server started!');
});
});
它会将每个请求的大量数据记录到文件中,但可以使用配置选项进行过滤:
404响应的示例日志项:
{
"event":"response",
"timestamp":1438690799059,
"id":"1438690799059:Matts-iMac.local:12134:icxbcqzv:10000",
"instance":"http://Matts-iMac.local:4000",
"labels":[
],
"method":"get",
"path":"/;jkdghkjsdgf",
"query":{
},
"responseTime":19,
"statusCode":404,
"pid":12134,
"source":{
"remoteAddress":"127.0.0.1",
"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36"
},
"log":[
{
"request":"1438690799059:Matts-iMac.local:12134:icxbcqzv:10000",
"timestamp":1438690799063,
"tags":[
"received"
],
"data":{
"id":"1438690799059:Matts-iMac.local:12134:icxbcqzv:10000",
"method":"get",
"url":"/;jkdghkjsdgf",
"agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36"
},
"internal":true
},
{
"request":"1438690799059:Matts-iMac.local:12134:icxbcqzv:10000",
"timestamp":1438690799067,
"tags":[
"handler",
"error"
],
"data":{
"msec":0.7662460058927536,
"error":"Not Found",
"data":{
"data":null,
"isBoom":true,
"isServer":false,
"output":{
"statusCode":404,
"payload":{
"statusCode":404,
"error":"Not Found"
},
"headers":{
"content-type":"application/json; charset=utf-8",
"cache-control":"no-cache",
"content-encoding":"gzip",
"vary":"accept-encoding"
}
},
"message":"Not Found"
}
},
"internal":true
},
{
"request":"1438690799059:Matts-iMac.local:12134:icxbcqzv:10000",
"timestamp":1438690799078,
"tags":[
"response"
],
"internal":true
}
]
}
看看这位好记者。它可以很好地插入并记录所有请求。我使用winston制作了自己的插件(因为我已经在其他系统部件中使用了它)。为了获得100%兼容的apache组合或自定义日志文件,我向winston添加了自己的格式化程序函数。那很管用。看起来不错,我明天再试试。但是我如何指定与apache组合日志匹配的行格式呢?这是很多信息,但是我想用一个经典的统计工具来分析日志。这就是我特别要求提供类似apache的日志文件的原因。这样大的json条目在vi中不容易读取,在任何webstats工具中都无法分析。