【问题标题】:Sails.js: Add Controller name and function to log entrySails.js:将控制器名称和功能添加到日志条目
【发布时间】:2017-06-22 09:25:05
【问题描述】:

我在sails.js v0.12.3 中自定义morgan 日志记录,我能够通过基于req 对象上的属性引入新的morgan 令牌来丰富日志条目 - 很好。

具体来说,我们要记录控制器及其调用的函数。

目标日志条目是:

UserController - find - GET /api/v1/users 200 125.952 ms - -

目前我们有一个单独的日志语句,它直接由 Controller 函数编写。但是在一些负载下,它们不会紧随其后出现。所以我们希望将这些信息放在一个日志条目中。

我的初步尝试:

当我记录 req.options.controller 时,它总是输出“会话”。我想这是因为我在 http.js 中的中间件顺序。

order: [ 'startRequestTimer', 'cachePreflights', 'morgan', 'bodyParser', 'handleBodyParserError', 'compress', 'methodOverride', 'router', 'www', 'favicon', '404', '500' ],

但是将morgan 放在router 之后会导致根本没有摩根输出。

你有什么想法可以让这成为可能吗?

【问题讨论】:

    标签: javascript node.js express sails.js morgan


    【解决方案1】:

    据我了解,

    1. 控制器由router决定和调用。
      因此,在router 启动之前,控制器是“会话”(或通用/未定义的)。
    2. 在非 404、非 500 请求的情况下,router 返回响应。
      因此,不会触发中间件 (morgan),如果它在 router 之后。

    在响应准备好之前,响应时间也是未知的。

    解决方案

    order 中保留router 之前的中间件。
    使用请求的end 事件打印日志。

    logRequestDetails: function(req, res, next) {
      req.on("end", function() {
        sails.log.verbose('Request', req.options.controller, req.options.action);
      });
    },
    

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多