如何在不使用日志记录库的情况下记录对hapi服务器发出的所有请求?

mik*_*1aj 16 javascript logging hapijs

我希望看到一个很好的日志,其中包含有关我的服务器的每个请求的简短信息,以便在开发期间使用.我已经在http://hapijs.com/api#request-logs上看到过这些文档,但是我无法理解它能让它运行起来.

config在创建服务器时,我应该将什么作为对象传递?我应该听事件并记录它们还是自动发生?如何记录所有请求,而不仅仅是错误?

我想避免安装日志库.

mik*_*1aj 33

所以我找到了一种方法:

server.events.on('response', function (request) {
    console.log(request.info.remoteAddress + ': ' + request.method.toUpperCase() + ' ' + request.path + ' --> ' + request.response.statusCode);
});
Run Code Online (Sandbox Code Playgroud)

然后日志看起来像这样:

127.0.0.1: GET /myEndpoint/1324134?foo=bar --> 200
127.0.0.1: GET /sgsdfgsdrh --> 404
Run Code Online (Sandbox Code Playgroud)

  • 不不不.我已经在问题中写道,我不想要记录库.我在评论中重复了这一点,以回答其他问题.我只需要一个*简单*日志记录供开发人员使用.'good`可能是*你*问题的答案,但这并不是我问我的问题的答案. (11认同)
  • 从hapi v17开始,它是`server.events.on()`而不是'server.on()` (3认同)

Vip*_*pin 10

在v17以上的Hapi.js版本中,请进行以下更改以使其正常工作:

server.events.on('response', function (request) {
    // you can use request.log or server.log it's depends
    server.log(request.info.remoteAddress + ': ' + request.method.toUpperCase() + ' ' + request.url.path + ' --> ' + request.response.statusCode);
});
Run Code Online (Sandbox Code Playgroud)

日志将是:

127.0.0.1: GET /todo --> 200
Run Code Online (Sandbox Code Playgroud)


Ger*_*osi 9

例如,最简单的方法是将good模块与其中一个good记者一起使用good-file.以下是如何使用它的示例:

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-file'),
            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);
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 好的已被弃用。“注意:由于缺乏可用的支持资源,该模块将于 2020 年 12 月 31 日被弃用。请考虑使用其他日志记录插件。” (2认同)