11

我碰巧使用 bunyan 来记录数据。我希望以适当的颜色打印日志,例如红色错误、调试黄色 .. 等;不幸的是,我无论如何都找不到这样做。现在我想知道温斯顿是否可能。我可以更改 winston 中日志数据的颜色吗?

这是我执行的代码。

  var logger = require("winston-color");
  var winston = require('winston');  
  var util    = require('util');

  var logFilename = __dirname + '/logfile.log';

  var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)(),
      new (winston.transports.File)({ 
      filename: 'logfile.log',
      timestamp:true 
     }),
      new (winston.transports.File)({
      name: 'error-log',
      filename: 'error.log',
      level: 'error'
      }),

     new (winston.transports.File)({
     name: 'info-log',
     filename: 'info.log',
     level: 'info'
     }),
    ]
  });
  logger.info('Hello Winston info!');
  logger.debug('Hello Winston debug!');
  logger.warn('Hello Winston warn!');
  logger.info('Hello again distributed logs'); 
  logger.error('error1');
  logger.error('error2');

此处的输出屏幕截图

工作代码的输出在这里

4

6 回答 6

10

是的你可以。您可以使用我在项目中使用的以下代码。

记录器/WinstonPlugin.js

/* jslint node: true */
/* jshint esversion: 6 */

'use strict';
const Winston = require('winston');
const logLevel = 'debug';

var logger;

(function createLogger() {

    logger = new(Winston.Logger)({
        transports: [
            new(Winston.transports.Console)({
                level: logLevel,
                colorize: true,
                timestamp: function () {
                    return (new Date()).toLocaleTimeString();
                },
                prettyPrint: true
            })
        ]
    });

    Winston.addColors({
        error: 'red',
        warn: 'yellow',
        info: 'cyan',
        debug: 'green'
    });
})();

module.exports = logger;

任何时候您都需要在任何代码文件中使用 Winston。您可以访问如下:

const Winston = require('logger/WinstonPlugin');
Winston.info('This is a info statement');
Winston.debug('This is a debug statement');
Winston.warn('This is a warning statement');
Winston.error('This is a error statement');

您将在控制台中看到彩色输出。

于 2017-11-29T12:38:07.183 回答
5

如果您寻找自定义颜色模式,您可以像这样编写自己的传输器

import winston from "winston";
import Transport from "winston-transport";

const Colors = {
    info: "\x1b[36m",
    error: "\x1b[31m",
    warn: "\x1b[33m",
    verbose: "\x1b[43m",
};

class SimpleConsoleTransport extends Transport {
    constructor() {
        super();
    }
    log = (info, callback) => {
        const { level, message, stack } = info;
        console.log(
                `${Colors[level]}${level}\t${message}\x1b[0m`,
                stack ? "\n" + stack : ""
            )
        if (callback) {
            callback();
        }
    };
}

然后以这种方式配置您的winston实例:

winston.configure({
            transports: [new SimpleConsoleTransport()],
        });

这些是您可以使用的完整颜色列表:

Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"

FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"
于 2020-08-19T12:01:11.947 回答
4

我遵循了这个答案并让它与颜色一起使用

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.colorize(),
            winston.format.simple()
          )
});
于 2020-08-19T10:35:27.103 回答
0

表情符号

您可以像其他人在他们的答案中提到的那样为文本使用颜色。

但是您可以改用表情符号!例如,您可以⚠️用于警告消息和错误消息。(即使没有记录器!但您也可以将其包装在记录器中以进行访问控制)

或者简单地将这些笔记本用作颜色:

console.log(': error message');
console.log(': warning message');
console.log(': ok status message');
console.log(': action message');
console.log(': canceled status message');
console.log(': Or anything you like and want to recognize immediately by color');

奖金:

此方法还可以帮助您直接在源代码中快速扫描和查找日志。

此外,它不依赖于任何框架,您可以在任何地方自由使用它。

但是 Linux 默认的 emoji 字体默认不是彩色的,你可能希望首先让它们变得彩色。

于 2020-12-03T17:27:47.070 回答
0

我没有试过这个。但据此,您使用颜色作为日志。 在此处输入链接描述

于 2017-11-06T09:38:02.837 回答
0

尝试了您的修复;温斯顿不注意任何颜色设置。

于 2018-04-10T21:47:12.620 回答