Миграция Winston Logger с 2.4.4 на 3.x ... Новые транспорты меня потеряли

Итак, я пытаюсь перейти с Winston 2.x на 3.x, однако это связано с довольно большим сдвигом в настройке транспортов, и я не могу заставить его работать так, как я его настраивал раньше, не говоря уже об улучшении по этому поводу. Что я хочу в консоли

[human-readable-date] [level(colourised)] : [text string], [formatted JSON]

В версии 2.4 я распечатал JSON в неформатированном виде, и этого было достаточно, но улучшения всегда приятны.

Это был мой старый файл конфигурации

const winston = require("winston");
require("winston-mongodb");
const config = require("./mongoDb").config;
const url = config.URL;

const tsFormat = () =>
  `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`;

const logger = new winston.Logger({
  transports: [
    new winston.transports.Console({
      timestamp: tsFormat,
      colorize: true
    }),
    new winston.transports.MongoDB({
      timestamp: tsFormat,
      db: url,
      level: "debug",
      autoReconnect: true
    })
  ]
});
module.exports = logger;

--РЕДАКТИРОВАТЬ--

Вот где я сейчас нахожусь

const winston = require("winston");
require("winston-mongodb");
const config = require("./");
const mongo = require("./mongo");

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.timestamp({
          format: "YYYY-MM-DD HH:mm:ss"
        }),
        winston.format.align(),
        winston.format.printf(
          info => `${info.timestamp} ${info.level}: ${info.message}`
        )
      )
    }),

    new winston.transports.MongoDB({
      db: `${config.mongoURI}/${config.mongodb}`,
      level: "debug",
      tryReconnect: true,
      storeHost: true
    })
  ]
});
module.exports = logger;

Но я не могу заставить работать желаемую часть JSON или отправить ее на mongodb

🤔 А знаете ли вы, что...
JavaScript поддерживает модульную структуру, что способствует организации кода на больших проектах.


1
437
1

Ответ:

Решено

Достигнуты те же результаты, что и мои предпочтительные локальные стили pino-pretty.

Смог распечатать стеки ошибок и дополнительные объекты метаданных.

Код:

I added an additional custom field for a namespace because my app creates a child logger for each file rather then exposing the "root" logger using logger.child({ label: namespace })

winston.format.combine(
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  winston.format.errors({ stack: true }),
  winston.format.colorize(),
  winston.format.printf(
    ({ timestamp, level, label, message, stack, ...rest }) => {
      const namespace = label ? `(${label})` : ''
      const errStack = stack ? `\n${stack}` : ''
      const meta =
        rest && Object.keys(rest).length
          ? `\n${JSON.stringify(rest, undefined, 2)}`
          : ''
      return `[${timestamp}] ${level}: ${namespace} ${message} ${meta} ${errStack}`
    }
  )
)

Полученные результаты: