有没有办法用restify来logging控制台中的每个请求?

我正在使用restify来构build一个API,而我习惯于express 。 有没有办法让restifylogging每一个请求,像app.use(express.logger('dev'))

这里是一个很简单的Restify / Bunyan例子,它会logging每一个请求:

 '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()调用。

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

假设一些事情:

  • 你有一个package.json文件,将安装bunyan和restify
  • 你把上面的代码放在一个名为server.js的文件中

你会/看到以下内容:

terminal窗口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} 

terminal窗口2

 $ curl localhost:8080/ "It worked!" 

如果有人想看我的package.json我可以把所有这一切都放在一个主意。

您也可以使用Express中使用的Morganlogging器中间件。 由于Restify故意从Express中大量借用,所以configuration完全一样。

这是用法服务器示例得到的方式:

 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); }); 

像这样:

在这里输入图像描述

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

“这个插件不会logging每一个单独的请求,使用Audit Logging插件或一个自定义的中间件来实现这个function。”

审计日志logging( docs )

审计日志logging是一个特殊的插件,因为您不使用.use(),而是使用after事件:

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

默认情况下, restify使用Bunyanlogging器。 从restify文档

RequestLogger设置一个带有当前请求ID填写的孩子bunyanlogging器,以及你定义的任何其他参数。

  server.use(restify.requestLogger({ properties: { foo: 'bar' }, serializers: {...} })); 

你可以不传递任何选项,在这种情况下,只有请求标识符被追加,并且没有附加序列化器(这也是最高性能的); 在服务器创build时创build的logging器将被用作父logging器。

我写了一些东西来做到这一点。 它仍在发展,但似乎到目前为止工作。 然后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,它没有漂亮的terminal颜色。

更新:我的软件包坏了(不知道为什么),但一个可行的替代品在这里: https : //groups.google.com/forum/?hl=en&fromgroups#!topic/ restify/ iLRiYz3Fko0