Могу ли я изменить цвет данных журнала в winston?

Мне довелось использовать 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');

выходной снимок экрана здесь

вывод рабочего кода здесь здесь


person srujana    schedule 06.11.2017    source источник
comment
Есть пакет winston-color, который выполняет эту работу?   -  person zcui93    schedule 06.11.2017
comment
не работал!! он показывает выход в простом белом!   -  person srujana    schedule 06.11.2017
comment
Глядя на код, кажется, что вы переопределили logger обратно на значение по умолчанию?   -  person zcui93    schedule 06.11.2017
comment
переопределить регистратор? не могли бы вы объяснить мне это? Если наблюдался снимок экрана вывода, он не печатал оператор отладки. Как я могу выбраться из этого?   -  person srujana    schedule 06.11.2017
comment
Я понял в чем проблема! но это также работает так же, как bunyan . Он показывает только уровни журнала в цветах, но не данные журнала.   -  person srujana    schedule 06.11.2017


Ответы (6)


Да, ты можешь. Вы можете использовать следующий код, который я использую в своем проекте.

logger/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');

и вы увидите цветной вывод в консоли.

person codesnooker    schedule 29.11.2017

Я последовал этому ответу и заставил его работать с цветами

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.colorize(),
            winston.format.simple()
          )
});
person Shonubi Korede    schedule 19.08.2020

Если вы ищете пользовательскую цветовую схему, вы можете написать свой собственный транспортер, подобный этому.

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"
person MohamadrezaRahimianGolkhandani    schedule 19.08.2020

Я не пробовал это. Но в соответствии с этим вы используете цвет для журналов. введите здесь описание ссылки

person Ajantha Bandara    schedule 06.11.2017
comment
Спасибо за ваш быстрый ответ . Я тоже пробовал. Но мне нужно, чтобы все данные журнала определенного уровня были одного цвета. - person srujana; 06.11.2017

Попробовал ваше исправление; Уинстон не обращает внимания ни на какие настройки цвета.

person jtiscione    schedule 10.04.2018

эмодзи

Вы можете использовать цвета для текста, как и другие, упомянутые в их ответах.

Но вместо этого вы можете использовать смайлики! например, вы можете использовать ⚠️ для предупреждающих сообщений и ???? для сообщений об ошибках. (Даже без логгера! Но вы также можете обернуть его внутри логгера для контроля доступа)

Или просто используйте эти блокноты в качестве цвета:

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 по умолчанию не цветной, и вы можете сначала сделать его цветным.

person Mojtaba Hosseini    schedule 03.12.2020