我用node.js和express开发了一个应用程序。我已经开始使用bunyan了,但是我很难理解热日志请求。
假设我的路由器调用这样的函数:
function(request, someOtherStuff, done){\\do something}其中request是从POST请求生成的,并且在request.body中有一些东西。
我想做以下工作:当函数内部发生错误时,我想记录错误以及来自用户的请求(包括req.body)。类似于:
if(err) {
bunyan.error(err,request);
done(err);
}我知道我可以在bunyan配置中使用serializers: {req: reqSerializer},但是我找不到任何实际记录请求的例子。
任何建议都是非常感谢的。
发布于 2015-07-08 22:53:48
实现的方法是在app.js中添加一个处理程序,如下所示:
app.use(function(req, res, next){
log.info(reqSerializer(req));
next();
});然后,reqSerializer函数包含您想要返回的内容。
function reqSerializer(req) {
return {
method: req.method,
url: req.url,
headers: req.headers,
somethingCustom: ...,
}
}此外,在初始化记录器时,请确保包含了reqSerializer,例如
var log = bunyan.createLogger({
name: 'myapp',
serializers: {
req: reqSerializer
},
}所以序列化程序所做的就是序列化req对象,您仍然需要将它传递给记录器,以便将其记录下来。
发布于 2015-01-08 15:59:28
序列化程序所做的是确保在写入日志记录时传递一个名为"req“的字段,它将被正确地格式化。
因此,一旦您有了该序列化程序,您可能只需调用以下命令就可以用请求记录错误:
logger.error({ req: request, err: err }, "Optionally, some message");其中logger是使用某些参数调用bunyan.createLogger的结果。
您可能还想了解一些东西,比如专门为记录请求而设计的摩根,或者如果您正在寻找更结构化的东西,则可能是bunyan-请求。
(顺便说一句,我希望在你写{req: reqSerializer}的时候,你是指{req: bunyan.stdSerializers.req}。)
https://stackoverflow.com/questions/24373298
复制相似问题