如何在不使用日志库的情况下记录对 hapi 服务器的所有请求?
Posted
技术标签:
【中文标题】如何在不使用日志库的情况下记录对 hapi 服务器的所有请求?【英文标题】:How to log all requests made to a hapi server without using a logging library? 【发布时间】:2015-06-27 01:58:49 【问题描述】:我希望看到一个漂亮的日志,其中包含有关对我的服务器的每个请求的简短信息,以在开发期间使用。我在http://hapijs.com/api#request-logs 上看过文档,但我对它的理解还不够,无法让它发挥作用。
当我创建服务器时,我应该将什么作为config
对象传递?然后我应该听事件并记录它们还是自动发生?如何记录所有请求,而不仅仅是错误?
我想避免安装日志库。
【问题讨论】:
您是否尝试过使用 http://hapijs.com/tutorials/logging 中建议的 Good 或 Bucker 之类的插件? 我见过这个,但我宁愿不引入一个新的库,除非它真的有必要。我想要一个所有请求的简单日志,就像大多数库默认做的那样。 Hapi 真的需要插件吗? Good 已弃用。 "注意:由于缺乏可用的支持资源,此模块将于 2020 年 12 月 31 日弃用。请考虑使用其他日志记录插件。" 【参考方案1】:于是我找到了办法:
server.events.on('response', function (request)
console.log(request.info.remoteAddress + ': ' + request.method.toUpperCase() + ' ' + request.path + ' --> ' + request.response.statusCode);
);
日志如下所示:
127.0.0.1: GET /myEndpoint/1324134?foo=bar --> 200
127.0.0.1: GET /sgsdfgsdrh --> 404
为 Hapi v18 编辑了答案,see older versions here
【讨论】:
你应该使用Good
或其他logging插件。
不不不。我已经在我不想记录库的问题中写道。我在 cmets 中对其他答案重复了这一点。我只需要一个 simple 日志记录供开发人员使用。 good
可能是对 your 问题的回答,但它不是对 my 问题的回答。
request.response.source
获取响应正文
从 hapi v17 开始,它是 server.events.on()
而不是 'server.on()`
在 Hapi v18 中,使用 request.url.pathname
或 request.path
。【参考方案2】:
在 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);
);
日志将是:
127.0.0.1: GET /todo --> 200
【讨论】:
【参考方案3】:最简单的方法是将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);
);
);
【讨论】:
我宁愿不为项目添加另一个库,只是为了简单地记录所有请求。 请注意,您还 can't customize the output format with good. 接受的答案比这更容易,因为您不必担心插件版本不兼容。 Good 已弃用。 "注意:由于缺乏可用的支持资源,此模块将于 2020 年 12 月 31 日弃用。请考虑使用其他日志记录插件。"以上是关于如何在不使用日志库的情况下记录对 hapi 服务器的所有请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不禁用进一步日志记录的情况下清除 catalina.out?
如何在不使用 Python 中的外部库的情况下解析 arff 文件