0

我在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会导致根本没有摩根的输出。

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

4

1 回答 1

0

据我了解,

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

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

解决方案

将中间件保留routerorder.
使用请求的end事件打印日志。

logRequestDetails: function(req, res, next) {
  req.on("end", function() {
    sails.log.verbose('Request', req.options.controller, req.options.action);
  });
},
于 2017-06-22T10:00:17.450 回答