Изменить цвет журнала bunyan для разных уровней

При использовании Bunyan все мои уровни журнала используют один и тот же голубой цвет, например:

введите описание изображения здесь

Вот конфигурация Баньяна, которую мы используем:

const bunyan = require('bunyan');
module.exports = bunyan.createLogger({name: 'cdt-api-server'});

Мой вопрос: как я могу заставить Bunyan использовать красный или пурпурный цвет для регистрации информации об ошибках / трассировки стека? Проблема в том, что «ОШИБКА» в красных символах недостаточно, чтобы привлечь мое внимание — я бы хотел, чтобы весь стек был красным или пурпурным.

Вот ознакомительный файл Bunyan: https://github.com/trentm/node-bunyan

Я вижу, что "цвет" упоминается только один раз.

Можем ли мы сделать что-то подобное?

const bunyan = require('bunyan');

module.exports = bunyan.createLogger({
  name: 'cdt-api-server',
  streams: [
    {
      level: 'trace',
      stream: process.stdout,
      color: 'black',
    },
    {
      level: 'debug',
      stream: process.stdout,
      color: 'blue',
    },
    {
      level: 'info',
      stream: process.stdout,
      color: 'cyan',
    },
    {
      level: 'error',
      path: process.stderr,
      color: 'red'
    },
    {
      level: 'warn',
      path: process.stderr,
      color: 'magenta'
    }
  ]
});

person Alexander Mills    schedule 03.08.2017    source источник


Ответы (2)


Один из способов изменить цвет вывода консоли при ведении журнала с помощью bunyan — предоставить собственный поток и использовать его в сочетании с цвета модуль.

В приведенном ниже примере информационный журнал будет отображаться синим цветом, а журнал ошибок — красным:

var colors = require('colors');
var bunyan = require('bunyan');

function MyRawStream() {}
MyRawStream.prototype.write = function (rec) {
    console.log('[%s] %s: %s',
        rec.time.toISOString(),
        bunyan.nameFromLevel[rec.level],
        rec.msg);
}

var log = bunyan.createLogger({
    name: 'play',
    streams: [
        {
            level: 'info',
            stream: new MyRawStream(),
            type: 'raw'
        }
    ]
});

log.info(colors.blue('This is an info message displayed in blue.'));
log.error(colors.red('This is an error message displayed in red.'));

/* Output:
[2017-08-14T20:32:33.550Z] info: This is an info message displayed in blue.
[2017-08-14T20:32:33.558Z] error: This is an error message displayed in red.
*/
person mscheker    schedule 14.08.2017
comment
метод записи, вероятно, можно перезаписать без использования console.log — вроде бы будет некорректно, если мы там будем использовать console.log, нет? - person Alexander Mills; 17.08.2017
comment
Под капотом console.log() вызывает process.stdout.write() с форматированным выводом; последняя функция используется bunyan по умолчанию для уровня журнала info — см. Введение в потоки. Написание указанной функции было тем, как я заставил это работать. Если вы посмотрите на реализацию для bunyan-format (это другой предлагаемый модуль), они фактически вызовите formatRecord() внутри перед отправкой вывода в process.stdout. - person mscheker; 17.08.2017

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

person Jehy    schedule 11.08.2017
comment
Что это за модуль? - person Alexander Mills; 11.08.2017
comment
Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели некоторое представление о том, что это такое и почему оно там. Всегда цитируйте наиболее релевантную часть важной ссылки на случай, если целевой сайт недоступен или навсегда отключится. - person Graham; 14.08.2017