【问题标题】:How to use Restify's RequestLogger?如何使用 Restify 的 RequestLogger?
【发布时间】:2015-02-10 23:18:15
【问题描述】:

RequestLogger

使用填写的当前请求 ID 以及您定义的任何其他参数设置一个子 bunyan 记录器。

server.use(restify.requestLogger());

注册插件不会记录请求。

【问题讨论】:

    标签: node.js restify bunyan


    【解决方案1】:

    RequestLogger 插件记录每个请求。它extends the .log property of the req

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

    您必须先注册自己的记录器,例如

    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}
    

    如果你的意图是记录每一个请求,那就放弃

    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}
    

    【讨论】:

    • @vanduc1102 我更愿意在接受我自己的答案之前给一些时间。看到没有其他答案,我会接受我自己的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2012-12-29
    • 2015-08-07
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多