【问题标题】:Winston 3.0 colorize whole output on consoleWinston 3.0 在控制台上为整个输出着色
【发布时间】:2018-12-03 08:39:33
【问题描述】:

我正在开发一个 Node.js 应用程序,使用 babel-cli 作为 ES6 转译器,我使用 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
            })
        ],
    });

输出仍然是这样的:

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

【问题讨论】:

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


    【解决方案1】:

    试试下面的代码。它将结合两种格式。它对我有用。

     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: 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"
    

    【讨论】:

    • 标识符alignColorsAndTime从何而来?
    • @MEMark 来自问题。
    【解决方案2】:

    另一个想法:

    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,
    
            }),
        ],
    });
    

    【讨论】:

      【解决方案3】:

      来自这篇帖子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(),
        ]
      
      });
      

      【讨论】:

        【解决方案4】:

        只需使用addColors()方法

        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', // fontStyle color
        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
        

        【讨论】:

        • 一般来说,如果答案包含对代码的用途的解释,以及为什么在不介绍其他人的情况下解决问题的原因,答案会更有帮助。
        • 基本上,这个问题应该是一个解决方案,其中输出应该看起来像这样i.stack.imgur.com/BqXev.png这个图像(粗体和彩色)。根据文档,winston 提供了一个名为 addColors( ) 的方法,在其他给定的解决方案中没有提到它。这是我对现有解决方案所做的唯一新更改。希望这会有所帮助。
        • 这应该是最佳答案
        • 这对我有用,但我必须在传输中添加一个format.colorize({all: true}) 作为@mehedihasan 代码。
        【解决方案5】:

        这将着色并以可读格式显示时间。并将所有错误也存储到一个文件中!

        import { createLogger, format, transports } from 'winston'
        
        const loggerFormat = format.combine(
          format.timestamp(),
          format.printf((info) => {
            return `${info.timestamp} - [${info.level.toUpperCase().padEnd(7)}]: ${
              info.message
            }`
          }),
          format.colorize({
            all: true,
          })
        )
        
        const logger = createLogger({
          format: loggerFormat,
          transports: [
            new transports.Console({ level: 'silly' }),
            new transports.File({ filename: 'error.log', level: 'error' }),
          ],
        })
        
        export default logger
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-14
          • 2016-06-29
          • 2014-06-27
          • 1970-01-01
          • 2017-09-08
          • 2012-06-15
          相关资源
          最近更新 更多