25

I followed a tutorial to set up winston (2.x) default logger in my express app. When updating to the current version of winston (3.0.0) I have a problem with adding the transports. I have followed the latest docs but still I get the notice in console and no log files are created at all:

[winston] Attempt to write logs with no transports

logging.js

const winston = require('winston');

module.exports = function () {

  const files = new winston.transports.File({ filename: 'logfile.log' });
  const myconsole = new winston.transports.Console();

  winston.add(myconsole);
  winston.add(files);

}

index.js

const winston = require('winston');
...

require('./logging');
winston.info("Give some info");

[winston] Attempt to write logs with no transports {"message":"Give some info","level":"info"}

What am I doing wrong?

tertek
  • 890
  • 1
  • 10
  • 20

3 Answers3

21

In winston 3 you need to create a logger object, then add transports to it.

Winston 3 has many examples, but to adapt from the readme, do something like this:

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logfile.log' })
  ]
});

logger.info('it works!!');
Pang
  • 9,564
  • 146
  • 81
  • 122
davewy
  • 1,781
  • 1
  • 16
  • 27
  • Thank you for clarifying the usage of `winston.createLogger`. The readme states using "your own logger" as the recommended way. Nevertheless I would rather prefer to use the "default logger" which is also listed within the [readme](https://github.com/winstonjs/winston#using-the-default-logger). Unfortunately, when using `winston.configure()` there is still the same notice in console as described in my original question. – tertek Oct 02 '18 at 21:37
  • That may be a bug worth opening a GH issue for. There are still some kinks with the 3.0 release that are being worked on, this may be one of them. – davewy Nov 05 '18 at 21:47
9

If you want to use the default logger in winston v3 then you simply have to add this piece of code in your main file

const winston = require('winston')

winston.add(new winston.transports.File({ filename: 'logfile.log' }))
5

I also had a similar issue. If I recall correctly, I had to call the requirement as a function in my index.js.

require('./logging')();
GCQ
  • 190
  • 3
  • 11