如何同时使用express-winston和winston-mongodb?

时间:2019-04-10 07:20:47

标签: node.js winston

我正在使用express-winstonwinston-mongodb将快递请求记录到mongodb。

express-winston配置:

expressWinston.logger({
  meta: true,
  //...other unrelated config
})

winston-mongodb配置:

new MongoDB({
  //...other unrelated config
})

可以登录到mongodb,但是meta字段为空。登录到文件/控制台可以完美地工作。

mongo插件无法识别express插件的日志格式。

我怎样才能让他们表现得好?

3 个答案:

答案 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");
};