Winson с меткой времени не добавляет метки времени

#node.js #winston

#node.js #winston

Вопрос:

Я создал простой регистратор Winston для своего приложения node, но конфигурация с метками времени не работает, что это значит? Это означает, что все журналы не имеют метки времени.

Пример:

 const { createLogger, format, transports } = require('winston');
const logger = createLogger({
    transports: [
        new transports.File({
            maxsize: 5120000,
            maxFiles: 20,
            filename: `logs/logs.log`,
            colorize: true,
            json: true,
            timestamp: true
        }),
        new transports.Console({
            level: "debug",
            timestamp: true,
            format: format.combine(
                format.colorize(), 
                format.simple(),
                format.timestamp()
            )
        })
    ]
});


module.exports = { logger };
  

Ответ №1:

simple() формат не выводит метку времени. поэтому вы должны определить пользовательский формат с помощью printf :

 const { createLogger, format, transports } = require('winston');

const myFormat = format.printf(({ level, message, label, timestamp }) => {
  return `${timestamp} [${label}] ${level}: ${message}`;
});

const logger = createLogger({
    transports: [
        new transports.File({
            maxsize: 5120000,
            maxFiles: 20,
            filename: `logs/logs.log`,
            timestamp: true,
            json: true,
        }),
        new transports.Console({
            level: "debug",
            timestamp: true,
            format: format.combine(
                format.timestamp(),
                format.colorize(), 
                myFormat,
            )
        })
    ]
});


module.exports = { logger };
  

я также переместил timestamp() формат перед myFormat, поскольку он должен заполнить временную метку сообщения, прежде чем оно достигнет printf.

Комментарии:

1. Привет. Я вернулся с другим вопросом. Временные метки отображаются, но не добавляются в file .log — есть ли какое-либо решение для добавления временных меток в файл журнала?

2. я обновил код для временных меток файлов. я также удалил раскрашивание из file transport, поскольку вы не должны помещать информацию о цвете в файл (используйте его только для консоли).

3. единственное отличие заключается в том, что вы должны переместить timestamp: true перед json: true

4. Я создал второй файл myformat и с помощью строковых шаблонов создал объект, это работает, но я понятия не имею, хороший ли это способ