Winston: Compartiendo el mismo transporte con diferentes etiquetas

Creado en 30 oct. 2015  ·  4Comentarios  ·  Fuente: winstonjs/winston

Me gustaría que todos mis registros tengan un prefijo que represente de dónde proviene el registro. De esta forma se crea un transporte múltiple para el mismo archivo, lo que obviamente es un

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

Básicamente quiero todos mis registros en un solo archivo/consola, pero con un prefijo diferente. ¿Algunas ideas?

Todos 4 comentarios

Creo que quieres esto: https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston

¡Gracias por esto! Lo vi antes, pero tenía la impresión de que los transportes se estaban recreando para cada registrador.

Por ejemplo el siguiente código:

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)

}

Dará Error: Transport already attached: console

¿Qué estoy haciendo incorrectamente?

Hola @indexzero ,

Estoy en Winston 3.0.0 .

Intenté esto también, sin saber si esta es la forma correcta; Básicamente, quiero una forma más fácil de prefijar cada mensaje de registro o adjuntar un campo predeterminado para cada registro en función del módulo/función desde el que se está registrando (para alguna estructura). Este es el código ( siguiendo el ejemplo en los documentos ):

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);
  };

Pero me sale la siguiente advertencia:

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

puede lograr esto agregando un objeto que contiene el campo "etiqueta" en los parámetros de su función de registro, ejemplo:
para el siguiente formato:

const imLogFormat = printf(información => {
devolver ${info.timestamp} [${info.label}] ${info.level}: ${info.message} ;
});

puedes hacer lo siguiente:

logger.error('Tengo el siguiente error' + err, {etiqueta: "Class1"})
logger.error('Tengo el siguiente error' + err, {etiqueta: "Class2"})

¿Fue útil esta página
0 / 5 - 0 calificaciones