如何使用Restify的RequestLogger?

RequestLogger

设置一个小孩bunyanlogging器与当前的请求ID填写,以及您定义的任何其他参数。

server.use(restify.requestLogger()); 

注册插件不logging请求。

RequestLogger插件不会logging每个请求。 它扩展了req.log属性 :

这样做的好处是,每个restify req实例都有一个新的bunyan实例日志,其中的请求id被自动注入,因此您可以轻松地将高吞吐量日志关联在一起。

你必须先注册自己的logging器,例如

 var restify = require('restify'), bunyan = require('bunyan'), // Create a logger. log = bunyan.createLogger({name: 'showtime'}), server; // Register logger. server = restify.createServer({ log: log }); // Extend logger using the plugin. server.use(restify.requestLogger()); // Use req.log property as a regular instance of bunyan logger. server.use(function (req, res, next) { req.log.info('TEST'); next(); }); server.get('/ping', function (req, res, next) { res.send('pong'); next(); }); server.listen(8080); 

/ping端点发出一些请求将产生以下日志:

 {"name":"showtime","hostname":"localhost.localdomain","pid":6446,"req_id":"3c734e70-81de-11e4-bc58-e3e7254ff287","level":30,"msg":"TEST","time":"2014-12-12T09:07:02.488Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6446,"req_id":"3d6bdf40-81de-11e4-bc58-e3e7254ff287","level":30,"msg":"TEST","time":"2014-12-12T09:07:04.116Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6446,"req_id":"3df47030-81de-11e4-bc58-e3e7254ff287","level":30,"msg":"TEST","time":"2014-12-12T09:07:05.011Z","v":0} 

注意“req_id”属性。

没有requestLogger代码的等价请求

 server.use(restify.requestLogger({ log: log, serializers: restify.bunyan.serializers })); 

会产生以下日志:

 {"name":"showtime","hostname":"localhost.localdomain","pid":6448,"level":30,"msg":"TEST","time":"2014-12-12T09:07:23.099Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6448,"level":30,"msg":"TEST","time":"2014-12-12T09:07:24.527Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6448,"level":30,"msg":"TEST","time":"2014-12-12T09:07:24.674Z","v":0} 

如果你的意图是logging每一个请求,然后沟

 server.use(function (req, res, next) { req.log.info('TEST'); next(); }); 

赞成:

 server.on('after', restify.auditLogger({ log: log })); 

这将产生日志:

 {"name":"showtime","hostname":"localhost.localdomain","pid":6451,"audit":true,"level":30,"remoteAddress":"192.168.100.1","remotePort":58986,"req_id":"00093110-81df-11e4-981e-e3d13800c8bf","req":{"method":"GET","url":"/ping","headers":{"user-agent":"curl/7.37.1","host":"192.168.100.100:8080","accept":"*/*"},"httpVersion":"1.1","trailers":{},"version":"*","timers":{"bunyan":378,"handler-1":3044}},"res":{"statusCode":200,"headers":{"content-type":"application/json","content-length":6},"trailer":false},"latency":6,"_audit":true,"msg":"handled: 200","time":"2014-12-12T09:12:30.629Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6451,"audit":true,"level":30,"remoteAddress":"192.168.100.1","remotePort":58989,"req_id":"2b2fcac0-81df-11e4-981e-e3d13800c8bf","req":{"method":"GET","url":"/ping","headers":{"user-agent":"curl/7.37.1","host":"192.168.100.100:8080","accept":"*/*"},"httpVersion":"1.1","trailers":{},"version":"*","timers":{"bunyan":105,"handler-1":607}},"res":{"statusCode":200,"headers":{"content-type":"application/json","content-length":6},"trailer":false},"latency":1,"_audit":true,"msg":"handled: 200","time":"2014-12-12T09:13:43.021Z","v":0} {"name":"showtime","hostname":"localhost.localdomain","pid":6451,"audit":true,"level":30,"remoteAddress":"192.168.100.1","remotePort":58990,"req_id":"2b6532a0-81df-11e4-981e-e3d13800c8bf","req":{"method":"GET","url":"/ping","headers":{"user-agent":"curl/7.37.1","host":"192.168.100.100:8080","accept":"*/*"},"httpVersion":"1.1","trailers":{},"version":"*","timers":{"bunyan":7067,"handler-1":677}},"res":{"statusCode":200,"headers":{"content-type":"application/json","content-length":6},"trailer":false},"latency":8,"_audit":true,"msg":"handled: 200","time":"2014-12-12T09:13:43.371Z","v":0}