winston: Attempt to write logs with no transports – using default logger
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?
In winston 3 you need to create a logger
object, then add transport
s 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!!');
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' }))
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')();