Почему winston выводит undefined?

let winston = require("winston");
let logger = winston.createLogger({
    format: {
        transform(info, opts) {
            info.message = "!" + info.message + "!";
            return info;
        }
    },
    transports: [
        new winston.transports.Console()
    ]
});

logger.info(“Something”);

Код выводит “undefined”. Почему так происходит?
При выборе встроенных форматов все прекрасно работает. Но когда я пишу свой, или даже вставляю формат из примеров из официальной документации winston, то нет.

let winston = require("winston");
let logger = winston.createLogger({
	format: winston.format.combine({
			transform(info, opts) {
				info.message = "!" + info.message + "!";
				return info;
			}
		},
		winston.format.json(),
	),
	transports: [
		new winston.transports.Console()
	]
});

logger.info("Something");

Так заработало (комбинированием форматтеров). Точной причины почему не работало не знаю. Возможно ты перезаписывал стандартные трансформы чьи результаты ожидает winston.

в combine минимум два аргумента? что будет, если убрать winston.format.json()
Если не сложно, можете посмотреть там поподробнее, почему именно не работает просто взять мой формат и поставить?

Любое количество. Его цель - построить цепочку преобразований сообщения.

Поведение как в твоем случае: undefined.

Я не буду дебажить винстон.

Я попробовал оставлять только твой форматтер, не работает. При том порядок тоже играет роль: работает только если .json() идет последним.

1 лайк