Winston 3.0为控制台上的整个输出着色

时间:2018-06-24 17:07:40

标签: javascript node.js ecmascript-6 colors winston

我会尽量简明扼要地介绍我的要求!

我正在使用babel-cli作为ES6编译器来开发NodeJS应用程序,并且我正在使用Winston 3.0作为日志记录服务。

问题:

我希望Winston记录器的消息的整个输出以彩色显示,不仅是标签和消息,还应该是时间戳。我知道,在Winston 2.x中,这在某些方面是可行的(不知道怎么做)。

我已经尝试过不同的NPM软件包,例如winston colorwinston-console-formatter,但它们似乎没有用。

我对记录器的定义如下:

    import winston from 'winston'

    let alignColorsAndTime = winston.format.combine(
        winston.format.colorize({
            all:true
        }),
        winston.format.label({
            label:'[LOGGER]'
        }),
        winston.format.timestamp({
            format:"YY-MM-DD HH:MM:SS"
        }),
        winston.format.printf(
            info => ` ${info.label}  ${info.timestamp}  ${info.level} : ${info.message}`
        )
    );

    export const logger = winston.createLogger({
        level: "debug",
        transports: [
            new (winston.transports.Console)({
                format: alignColorsAndTime
            })
        ],
    });

仍然输出看起来像这样: Click for Image

虽然我希望它看起来像这样: Click for Image

如果您有任何关于解决此问题的想法,我将非常感激。谢谢:)

4 个答案:

答案 0 :(得分:1)

尝试以下代码。它将结合两种格式。这个对我有用。

export const logger = winston.createLogger({
    level: "debug",
    transports: [
        new (winston.transports.Console)({
            format: winston.format.combine(winston.format.colorize(), alignColorsAndTime)
        })
    ],
});

请注意,填充必须处理颜色。例如:

const padding= info.level.length <= 7?7:17;  //padding differently if it has colour.
${info.level.padEnd(padding,' ')}

经过测试:

"winston": "^3.1.0"

答案 1 :(得分:1)

另一个想法:

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;

const colorizer = winston.format.colorize();

const logger = winston.createLogger({
    levels: {
        error: 0,
        warn: 1,
        info: 2,
        debug: 4
    },
    format: combine(
        winston.format.timestamp(),
        winston.format.simple(),
        winston.format.printf(msg =>
            colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
        )
),
    transports: [
        new (winston.transports.Console)({
            // format: winston.format.combine(winston.format.colorize(), alignColorsAndTime),
            prettyPrint: true,
            colorize: true,
            timestamp: true,

        }),
    ],
});

答案 2 :(得分:0)

此帖子https://github.com/winstonjs/winston/issues/1388

const colorizer = winston.format.colorize();

const logger = winston.createLogger({
  level: 'debug',
  format: combine(
    winston.format.timestamp(),
    winston.format.simple(),
    winston.format.printf(msg => 
      colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
    )
  ),
  transports: [
    new transports.Console(),
  ]

});

答案 3 :(得分:0)

const { createLogger, format, transports, addColors } = require('winston');
const { combine, colorize, label, timestamp, json, prettyPrint, printf } = format;
require('winston-mongodb');
let myCustomFormat = format.combine(
colorize({
    all: true
}),
label({
    label: '[LOGGER]'
}),
timestamp({
    format: 'YY-MM-DD HH:MM:SS'
}),
printf((info) => ` ${info.label} ${info.timestamp}  ${info.level} : ${info.message}`));

addColors({
info: 'bold blue',
warn: 'italic yellow',
error: 'bold red',
debug: 'green'});

const logger = createLogger({
level: 'info',
transports: [ new transports.Console({format: combine(myCustomFormat)})]
});

这对我有用,可以自定义颜色和字体样式。 文档中的可能选项如下。

Font styles: bold, dim, italic, underline, inverse, hidden, strikethrough.

Font foreground colors: black, red, green, yellow, blue, magenta, cyan, white, gray, grey.

Background colors: blackBG, redBG, greenBG, yellowBG, blueBG magentaBG, cyanBG, whiteBG