lonix
lonix

Reputation: 20591

How to use express-winston and winston-mongodb together?

I'm using express-winston and winston-mongodb to log express requests to mongodb.

express-winston config:

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

winston-mongodb config:

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

Logging to mongodb works, but meta field is null. Logging to file/console works perfectly.

The mongo plugin doesn't recognize the express plugin's log format.

How can I get them to play nice?

Upvotes: 0

Views: 3035

Answers (3)

Obinna Nnamani
Obinna Nnamani

Reputation: 31

If you want to log to File and MongoDB then:

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

Upvotes: 1

keepTrackOfYourStack
keepTrackOfYourStack

Reputation: 1255

This is what finally worked for me: v6.12.1 Noticed later that while this works for db logging, the meta is empty for the file transport. Not sure why.

 const winston = require('winston');     
 module.exports = function(err, req, res, next) {
 winston.error(err.message, {metadata: { prop: err } });
 res.status(500).send('Something failed.');
 };

Upvotes: 2

necipakif
necipakif

Reputation: 76

When you look at the express-winston and winston-mongodb codes, you can easily see the difference. winston-mongodb writes the value that matches the metaKey field to the specified collection. Therefore, if you define it as follows, the meta field will not be null.

...
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,
...

Upvotes: 6

Related Questions