Winston: Совместное использование одного и того же транспорта с разными метками

Созданный на 30 окт. 2015  ·  4Комментарии  ·  Источник: winstonjs/winston

Я хотел бы, чтобы все мои журналы имели префикс, указывающий, откуда пришел журнал. Таким образом создается несколько транспортов для одного и того же файла, что, очевидно,

var config = require('config')
var winston = require('winston')

var loggers = {}


function getLogger(moduleName) {
  if (!loggers[moduleName]) {
    loggers[moduleName] = createNewLogger(moduleName)
  }

  return loggers[moduleName]
}

function createNewLogger(moduleName) {
  var logger = new winston.Logger()

  //https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
  logger.add(winston.transports.Console,
    {
      colorize: true,
      timestamp: true,
      label: moduleName,
      level: config.get('log.level')
    }
  )

  logger.add(winston.transports.DailyRotateFile,
    {
      filename: config.get('log.filename'),
      level: config.get('log.level')
    }
  )

  return logger
}

module.exports = getLogger

Я в основном хочу, чтобы все мои журналы были в одном файле/консоли, но с другим префиксом. Любые идеи?

Все 4 Комментарий

Я считаю, что вы хотите этого: https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston

Спасибо за это! Я видел это раньше, но у меня сложилось впечатление, что транспорты пересоздаются для каждого логгера.

Например, следующий код:

function getLogger(moduleName) {
  console.log('Initializing logger for: ' + moduleName)
  winston.loggers.add(moduleName, {
    //https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
    Console: {
      colorize: true,
      timestamp: true,
      label: moduleName,
      level: config.get('log.level')
    },
    DailyRotateFile: {
      filename: config.get('log.filename'),
      level: config.get('log.level')
    }
  })

  return winston.loggers.get(moduleName)

}

Даст Error: Transport already attached: console

Что я делаю неправильно?

Привет @indexzero ,

Я на Винстон 3.0.0 .

Я тоже пробовал это, не уверенный, что это правильный путь; в основном я хочу более простой способ префикса каждого сообщения журнала или присоединения поля по умолчанию для каждого журнала на основе модуля/функции, из которой он регистрируется (для некоторой структуры). Это код ( исходя из примера в документах ):

const loggers = {};
module.exports.getModuleLogger = (moduleName, methodName) => {
    const categoryName = [moduleName, methodName].join(':');
    if (!loggers[categoryName]) {
      loggers[categoryName] = winston.loggers.add(categoryName, {
        console: {
          label: categoryName,
        },
        file: {
          filename: './log/test.log',
          label: categoryName,
        },
      });
    }
    return winston.loggers.get(categoryName);
  };

Но я получаю следующее предупреждение:

[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}

вы можете добиться этого, добавив объект, содержащий поле «метка» в параметрах вашей функции журнала, например:
для следующего формата:

const imLogFormat = printf(info => {
вернуть ${info.timestamp} [${info.label}] ${info.level}: ${info.message} ;
});

вы можете сделать следующее:

logger.error('У меня следующая ошибка' + err, {label: "Class1"})
logger.error('У меня следующая ошибка' + err, {label: "Class2"})

Была ли эта страница полезной?
0 / 5 - 0 рейтинги