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

Sam*_*duc 14 node.js express restify

我正在使用restify构建API,我已经习惯了express.有没有办法restify在控制台中记录每个请求,就像expressapp.use(express.logger('dev'))

jam*_*ung 21

这是一个非常简单的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);
});
Run Code Online (Sandbox Code Playgroud)

关键是server.pre()电话.

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

假设一些事情:

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

终端窗口2

$ curl localhost:8080/
"It worked!"
Run Code Online (Sandbox Code Playgroud)

如果有人想看到我,package.json我可以把所有这些都放在一个要点.


Jav*_*diz 12

您还可以使用Express中使用的Morgan记录器中间件.由于Restify故意从Express中大量借用,因此配置完全相同.

这是Usage服务器示例的获取方式:

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

得到这样的:

在此输入图像描述


A T*_*A T 6

有关使用RequestLogger的信息,请参阅文档中的以下注释:

"这个插件并不会记录每个人的要求.使用审核日志记录插件或使用自定义的中间件."

审计记录(docs)

审核日志记录是一个特殊的插件,因为您不使用.use(),但使用after事件:

server.on('after', restify.auditLogger({
  log: bunyan.createLogger({
    name: 'audit',
    stream: process.stdout
  })
}));
Run Code Online (Sandbox Code Playgroud)