Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在hapi.js服务器中编写类似Apache的访问日志_Node.js_Hapijs - Fatal编程技术网

Node.js 如何在hapi.js服务器中编写类似Apache的访问日志

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,做了一个简单的服务器。现在我想编写一个类似apache的access.log。最好的方法是什么


我可以只使用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工具中都无法分析。