我正在使用express-winston
和winston-mongodb
将快递请求记录到mongodb。
express-winston配置:
expressWinston.logger({
meta: true,
//...other unrelated config
})
winston-mongodb配置:
new MongoDB({
//...other unrelated config
})
可以登录到mongodb,但是meta
字段为空。登录到文件/控制台可以完美地工作。
mongo插件无法识别express插件的日志格式。
我怎样才能让他们表现得好?
答案 0 :(得分:2)
当您查看express-winston和winston-mongodb代码时,您可以轻松地看到它们之间的区别。 winston-mongodb将与metaKey字段匹配的值写入指定的集合。 因此,如果按如下定义,则meta字段将不会为空。
...
transports: [
new winston.transports.Console({
format: winston.format.json({
space: 2
})
}),
new winston.transports.MongoDB({
db: config.db.mongooseURI,
options: config.db.options,
collection:'logs',
capped:true,
metaKey:'meta'
}),
],
meta: true,
...
答案 1 :(得分:1)
这终于对我有用:v6.12.1稍后注意到,尽管这适用于db日志记录,但元对于文件传输而言是空的。不知道为什么。
const winston = require('winston');
module.exports = function(err, req, res, next) {
winston.error(err.message, {metadata: { prop: err } });
res.status(500).send('Something failed.');
};
答案 2 :(得分:0)
如果要登录到File和MongoDB,则:
winston.add(
new winston.transports.MongoDB({
db: process.env.CONNECTIONSTRING,
options: { useUnifiedTopology: true },
metaKey: 'meta'
})
)
module.exports = function (err, req, res, next) {
// Log the exception
winston.error({message: err.message, level: err.level, stack: err.stack, meta: err})
res.status(500).send("Something failed..Cannot connect to Server");
};