Search code examples
node.jsloggingparse-platformparse-server

How to add multiple transport for parse-server logger?


I can access to the winston logger exposer by parse-server with let logger = require('parse-server').logger;

I would like to configure several transport file to have separate file with different logging levels like I can do with Winston:

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({
      name: 'info-file',
      filename: 'filelog-info.log',
      level: 'info'
    }),
    new (winston.transports.File)({
      name: 'silly-file',
      filename: 'filelog-silly.log',
      level: 'silly'
    })
  ]
});

I've tried by usgin winston function like: logger.add(winston.transports.File, { ... });

And with:

winston.configure({
    transports: [
      new (winston.transports.File)({ filename: 'somefile.log' })
    ]
  });

But it doesn't work. I also saw this PR https://github.com/parse-community/parse-server/pull/2363 but I coudn't understand how to add these transports from my index.js in parse-server.

Can someone give me some hints? Thanks!

Additional info: parse-server version: 2.6.2


Solution

  • I was trying to do similar as you. I wanted to add a transport to send logs to loggly.

    I think the way to do it, is to use the logger object, that is exported together with the ParseServer object from the parse-server package.

    The way how I added the loggly additional transport is the following:

    const {ParseServer, logger} = require('parse-server');
    
    const loggly = require('winston-loggly');
    
    const parseApi = new ParseServer({
    ...
    });
    
    logger.adapter.addTransport(new loggly.Loggly({
      subdomain: 'my-subdomain',
      token: 'myToken',
      json: true
    }));
    

    I believe this is safe to do, as the logger is exported by the package in the same way as ParseServer.

    Hope it helps. Lukas