Javascript 使用基于express请求的变量进行日志记录(相关id)
我们正在向node express应用程序添加相关id,以将请求联系在一起。该id从其他服务发送到报头中,我们的中间件收集该id,使用该id创建一个bunyan记录器,并将其添加到请求对象中 我们目前的路线如下所示:Javascript 使用基于express请求的变量进行日志记录(相关id),javascript,node.js,express,logging,bunyan,Javascript,Node.js,Express,Logging,Bunyan,我们正在向node express应用程序添加相关id,以将请求联系在一起。该id从其他服务发送到报头中,我们的中间件收集该id,使用该id创建一个bunyan记录器,并将其添加到请求对象中 我们目前的路线如下所示: router.get('', (req, res, next) => { service.doSomething(req.params.userid) .then(items => res.json(items)) .catch((er
router.get('', (req, res, next) => {
service.doSomething(req.params.userid)
.then(items => res.json(items))
.catch((err) => next(err));
});
router.get('', (req, res, next) => {
let logger = req.log;
service.doSomething(req.params.userid, logger)
.then(items => res.json(items))
.catch((err) => next(err));
});
目前提出的解决方案如下所示:
router.get('', (req, res, next) => {
service.doSomething(req.params.userid)
.then(items => res.json(items))
.catch((err) => next(err));
});
router.get('', (req, res, next) => {
let logger = req.log;
service.doSomething(req.params.userid, logger)
.then(items => res.json(items))
.catch((err) => next(err));
});
这意味着doSomething
及其调用的每个函数都需要接受日志对象作为参数。这意味着几乎每个函数都需要接受一个日志对象
例如:
function add(a, b, log) {
log.debug("Trivial example");
return a + b;
}
是否有更好的方法在每个请求的基础上进行此日志记录,而不将日志对象传递给每个函数?您可以使用express应用程序。为此,请使用
在注册端点之前注册中间件,并在那里处理日志记录
var express = require('express');
var app = express();
// register middleware here
app.use(function(req,res,next){
service
.doSomething.call(req)
.then(items => res.json(items))
.catch((err) => next(err));
next();
});
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
通过此操作,您可以使用与回调函数本身相同的作用域访问do something方法。然后可以通过this.log
访问req.log
。即使是req.params.userId
也可以通过this.params.userId
希望有帮助 我认为这有助于记录对服务的请求。不确定如何从服务本身中记录消息。纳泽布更新了我的答案