Sails.js:将控制器名称和功能添加到日志条目

Sails.js: Add Controller name and function to log entry

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

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

目标日志条目为:

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

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

我的初步尝试:

当我记录 req.options.controller 时,它总是输出 'session'。我想那是因为我在 http.js 中的中间件顺序。

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

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

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

据我了解,

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

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

解决方案

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

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