有没有办法在resrigey中记录控制台中的每个请求?

时间:2013-12-17 05:18:56

标签: node.js express restify

我正在使用restify来构建API,而我已经习惯express了。有没有办法让restify在控制台中记录每个请求,例如expressapp.use(express.logger('dev'))一样?

6 个答案:

答案 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()来电。

在一个终端窗口中启动它并在另一个终端窗口中执行卷曲请求。您将看到它的响应,以及请求的日志条目。

假设一些事情:

  • 你有一个将安装bunyan和restify的package.json文件
  • 您将上面的代码放在名为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);
});

得到这样的结果:

enter image description here

答案 2 :(得分:6)

关于使用 RequestLogger ,请参阅the docs中的此评论:

  

"此插件记录每个请求。使用Audit Logging插件或自定义中间件进行该用途。"

审核记录(docs

  

审核日志记录是一个特殊的插件,因为您不能将它与.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