Струнная интерполяция с winston не работает в Nodejs - PullRequest
0 голосов
/ 12 июня 2019

Когда я пытался войти в систему с помощью winston logger, я не смог правильно увидеть идентификатор и ошибку в nodejs.

Вот файл logger.js:

const path = require('path');
const winston = require('winston');

module.exports = function (app) {
  global.logger = new Logger(app.config.get('app').logLevel);
};

function Logger(logLevel='info') {
  return winston.createLogger({
    levels: {alert: 0, error: 1, warn: 2, info: 3, verbose: 4, debug: 5, silly: 6},
    level: logLevel,
    transports: [
      new (winston.transports.Console)({level: logLevel}),
      new (require('winston-daily-rotate-file'))({filename: path.resolve(__dirname + '/../../logs/app.log')})
    ]
  });
}

В Customer.js я пытался войти так:

logger.warn('Failed to update patient during user(%s) creation', userInstance.id, err);

Вот что я получаю в качестве вывода:

 {"_bsontype":"ObjectID","id":{"type":"Buffer","data":[93,0,225,203,227,175,68,1,61,50,162,194]},"level":"warn","message":"Failed to update patient during user(%s) creation"}

Пожалуйста, поправьте меня, если я ошибаюсь.

1 Ответ

1 голос
/ 12 июня 2019

С Документ Уинстона :

Метод log обеспечивает интерполяцию строк с использованием util.format. Он должен быть включен с помощью format.splat ().

Кажется, вам нужно указать его во время инициализации регистратора. По той же ссылке:

const logger = createLogger({
  format: format.combine(
    format.splat(),
    format.simple()
  ),
  transports: [new transports.Console()]
});
...