Уинстон пишет только на один транспорт

Я использую кастом winston регистратор для одновременной записи в консоль и в файл в зависимости от уровня ведения журнала (т. е. все, что для консоли, но только ошибки и предупреждения в файл). По какой-то причине запись в консоль работает, пока в файл ничего не записывается, хотя я вызываю ошибку.

Изначально я перепутал порядок уровней, начиная с trace = 0 до error = 9. Пока у меня была такая настройка winston пишет в файл, но не в консоль. Я предполагаю winston пишет только на один транспорт, а потом останавливается?

Мой конфиг выглядит так:

import winston from 'winston';

const logger = new (winston.Logger)({
  levels: {
    trace: 9,
    input: 8,
    verbose: 7,
    prompt: 6,
    debug: 5,
    info: 4,
    data: 3,
    help: 2,
    warn: 1,
    error: 0,
  },
  colors: {
    trace: 'magenta',
    input: 'grey',
    verbose: 'cyan',
    prompt: 'grey',
    debug: 'blue',
    info: 'green',
    data: 'grey',
    help: 'cyan',
    warn: 'yellow',
    error: 'red',
  },
});

logger.add(winston.transports.Console, {
  level: 'trace',
  prettyPrint: true,
  colorize: true,
  silent: false,
  timestamp: false,
});

logger.add(winston.transports.File, {
  prettyPrint: false,
  level: 'error',
  silent: false,
  colorize: true,
  timestamp: true,
  filename: `${__dirname}/../logs/error.log`,
  maxsize: 40000,
  maxFiles: 10,
  json: false,
});

1 ответ

Кажется, я должен был дать каждому транспорту имя. Т.е.

logger.add(winston.transports.Console, {
  name: 'trace-console',
  // ...
});

logger.add(winston.transports.File, {
  name: 'error-file',
  // ...
});

Теперь, кажется, работает как ожидалось.

редактировать: по некоторым причинам, оба должны иметь colorize опция установлена ​​в true (?).

Другие вопросы по тегам