Search code examples
node.jsloggingwinston

How to color Winston logger?


I've been reading the documentation but I can't find a way to have color. I set the colors available by winston in colorsLogger and pass them to addColor() as a parameter. After creating the transport I declare colorize as true.

const { addColors, createLogger, format, transports } = require('winston');

const transportsList = [];

const colorsLogger = {
    error: 'red',
    warn: 'yellow',
    info: 'cyan',
    debug: 'green'
};

addColors(colorsLogger);

transportsList.push(
    new transports.Console({
        colorize: true,
        prettyPrint: true,
        format: format.combine(
            format.printf(info => `[${info.timestamp}] ${info.level}: ${info.message}`),
        )
    })
);

const logger = createLogger({
    format: format.combine(
        format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
        format.json()),
    transports: transportsList
});

module.exports = logger;

Solution

  • You need provide the colorize as a function. Something like this

    transportsList.push(
      new transports.Console({
        "prettyPrint": true,
        "format": format.combine(
          format.colorize(), // see this
          format.printf(info => `[${info.timestamp}] ${info.level}: ${info.message}`)
        )
      })
    );
    

    Hope this helps.