我正在使用restify
来构建API,而我已经习惯express
了。有没有办法让restify
在控制台中记录每个请求,例如express
跟app.use(express.logger('dev'))
一样?
答案 0 :(得分:20)
这是一个非常简单的Restify / Bunyan示例,它将记录每个请求:
'use strict';
var Logger = require('bunyan'),
restify = require('restify'),
log = new Logger.createLogger({
name: 'app-name',
serializers: {
req: Logger.stdSerializers.req
}
}),
server = restify.createServer({
name: 'app-name',
version: '0.1.0',
log: log
});
server.pre(function (request, response, next) {
request.log.info({ req: request }, 'REQUEST');
next();
});
server.get('/', function (request, response, next) {
response.send('It worked!');
next();
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
关键是server.pre()
来电。
在一个终端窗口中启动它并在另一个终端窗口中执行卷曲请求。您将看到它的响应,以及请求的日志条目。
假设一些事情:
server.js
您可以/看到以下内容:
终端窗口1
$ node server.js
app-name listening at http://0.0.0.0:8080
{"name":"app-name","hostname":"leeloo.local","pid":97387,"level":30,"req":{"method":"GET","url":"/","headers":{"user-agent":"curl/7.30.0","host":"localhost:8080","accept":"*/*"},"remoteAddress":"127.0.0.1","remotePort":60870},"msg":"REQUEST","time":"2014-04-21T17:55:52.487Z","v":0}
终端窗口2
$ curl localhost:8080/
"It worked!"
如果有人想看到我的package.json
,我可以将所有这些都放在一个要点中。
答案 1 :(得分:12)
您还可以使用Express中使用的Morgan记录器中间件。由于Restify故意从Express中大量借用,因此配置完全相同。
这是Usage server example得到的方式:
var restify = require('restify');
var logger = require('morgan')
var server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
server.use(logger('dev'));
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
得到这样的结果:
答案 2 :(得分:6)
关于使用 RequestLogger ,请参阅the docs中的此评论:
"此插件不记录每个请求。使用Audit Logging插件或自定义中间件进行该用途。"
审核日志记录是一个特殊的插件,因为您不能将它与.use()一起使用,但是使用after事件:
server.on('after', restify.auditLogger({
log: bunyan.createLogger({
name: 'audit',
stream: process.stdout
})
}));
答案 3 :(得分:0)
默认restify
使用Bunyan记录器。从restify文档
RequestLogger 使用当前请求设置子bunyan记录器 id已填入,以及您定义的任何其他参数。
server.use(restify.requestLogger({
properties: {
foo: 'bar'
},
serializers: {...}
}));
您可以不传入任何选项,在这种情况下,只会附加请求ID,并且不会附加序列化程序(这也是 最高效的);在服务器创建时创建的记录器将 用作父记录器。
答案 4 :(得分:0)
如果只想在开发环境中使用它,则有一种快速实现此目标的快速方法。
UIBarButtonItem.appearance
答案 5 :(得分:-4)
我写了一些东西来做这件事。它仍在开发中,但到目前为止似乎有效。 npm install restify-dev-logger,然后
var logger = require("restify-dev-logger");
var restify = require("restify");
var srv = restify.createServer(...);
srv.use(logger.dev);
或类似的东西。还有logger.devbw,它没有漂亮的终端颜色。
更新:我的包裹坏了(不知道为什么),但是可以替换的是https://groups.google.com/forum/?hl=en&fromgroups#!topic/restify/iLRiYz3Fko0