Уинстон сохраняет форматирование цвета в тексте, как удалить это, но все равно показать цвет?

1

Я пытаюсь создать модуль протоколирования, используя winston в качестве рамки ведения журнала. Это позволяет мне указывать цвета, что довольно хорошо, если транспорт является Console, но если бы я должен был определить два транспорта, один Console, один File, он фактически сохранит строку форматирования терминала в тексте, которая будет сохранена в файл.

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

const { combine, colorize, printf, timestamp } = format;

const logFormat = printf((info) => {
  return '[${info.timestamp}] ${info.level}: ${info.message}';
});

const rawFormat = printf((info) => {
  return '[${info.timestamp}] ${info.level}: ${info.message}';
});

const config = require('../config');

const logger = createLogger({
  level: config.DEBUG,
  format: combine(
    colorize(),
    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    logFormat,
  ),
  transports: [
    new transports.File({
      filename: 'combined.log',
    }),
    new transports.Console({ format: combine(timestamp(), rawFormat) }),
  ],
});

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

module.exports = logger;

Консоль будет выглядеть так:

[2018-06-12 15:54:14] info: Listening on port 9000

Где info окрашивается в зеленый цвет, но если я combine.log файл combine.log, он будет отображаться как:

[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000

Возможно ли записывать исходный текст в файл, но все же показывать цвета в терминале?

Если нет, есть ли другая библиотека, которая позволяет это? Скажите bunyan?

Теги:
express
logging
winston

1 ответ

0
Лучший ответ

Я не знаю, нужна ли вам это больше, но поздно лучше, чем никогда.

В основном вам просто нужно отменить colorzie() из общего формата, который вы определили, затем использовать его в colorzie() транспортов, которые вы хотите показать цветом.

var options = {
    console: {
        handleExceptions: true,
        level: 'debug',
        format: combine(colorize(), myFormat)
    },
    verbose: {
        filename: './logs/debug/mobile_api-%DATE%.log',
        level: 'debug',
        format: combine(myFormat)
    },
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
    new transports.Console(options.console),
    new transports.file(options.verbose),
]
});

При этом, когда журнал печатается в консоли, вы можете видеть цвет и при записи в файл, он вообще не будет отображать цветовой код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню