来自请求对象的Node / Express访问记录器

时间:2015-06-08 17:54:55

标签: javascript node.js logging express

我正在尝试查看是否有办法从请求对象访问我的记录器。我有一个cusotm winston包装器,它使用winston,express-winston,以及在我的应用程序中保持清洁的时刻。

在我的app.js中我只有

  var logger = require('winston-custom');

  server.use(logger());

然后在控制器中我试图找到一种干净的方法让记录器离开请求对象(如果可能的话),所以我不必在这里导入它。我的第一个猜测是它在req.app上,但它似乎不是。

所以在我所拥有的同一台服务器的控制器中

 function rootAPI(req, res) {
  console.log("req.app", req.app);

这似乎没有提供任何东西,我甚至尝试记录req并挖掘它。有没有办法正确实现这一目标?谢谢!

2 个答案:

答案 0 :(得分:2)

如果您确定需要此功能,可以通过在request上添加自定义字段来实现此功能:

server.all("*", function(req, res, next)
{
    req.logger = logger;
    next();
});

答案 1 :(得分:1)

虽然上面的答案是正确的,但我们可以通过创建快速中间件来简化实现:

const app = express()
const loggerMiddleware = (req, res, next) => { req.logger = logger; next()};
app.use(loggerMiddleware)

调用next()很重要,否则不会调用下一个中间件。

https://expressjs.com/en/guide/using-middleware.html