Итак, я пытаюсь перейти с 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
Достигнуты те же результаты, что и мои предпочтительные локальные стили 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}`
}
)
)
Полученные результаты:
Честно говоря, я сдался и остановился на 2.X! Спасибо за это, протестирую в своем следующем проекте