Winston: Berbagi transportasi yang sama dengan label yang berbeda

Dibuat pada 30 Okt 2015  ·  4Komentar  ·  Sumber: winstonjs/winston

Saya ingin semua log saya memiliki awalan yang menunjukkan dari mana log itu berasal. Cara ini membuat banyak transport untuk file yang sama, yang jelas-jelas merupakan

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

Saya pada dasarnya ingin semua log saya menjadi satu file/konsol, tetapi dengan awalan yang berbeda. Ada ide?

Semua 4 komentar

Saya yakin Anda menginginkan ini: https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston

Terima kasih untuk ini! Saya pernah melihatnya sebelumnya, tetapi saya mendapat kesan bahwa transport dibuat ulang untuk setiap logger.

Misalnya kode berikut:

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)

}

Akan memberikan Error: Transport already attached: console

Apa yang saya lakukan salah?

Hai @indexzero ,

Saya di winston 3.0.0 .

Saya mencoba ini juga, tidak yakin apakah ini cara yang benar; pada dasarnya saya ingin cara yang lebih mudah untuk mengawali setiap pesan log atau melampirkan bidang default untuk setiap log berdasarkan modul/fungsi yang sedang login (untuk beberapa struktur). Ini adalah kode ( mengikuti contoh di dokumen ):

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

Tapi saya mendapatkan peringatan berikut:

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

anda dapat mencapai ini dengan menambahkan penyihir objek berisi bidang "label" di parameter fungsi log Anda, contoh:
untuk format berikut:

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

Anda dapat melakukan hal berikut:

logger.error('Saya memiliki kesalahan berikut' + err, {label: "Class1"})
logger.error('Saya memiliki kesalahan berikut' + err, {label: "Class2"})

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

alditis picture alditis  ·  3Komentar

greenhat616 picture greenhat616  ·  3Komentar

JaehyunLee-B2LiNK picture JaehyunLee-B2LiNK  ·  3Komentar

bertolo1988 picture bertolo1988  ·  3Komentar

anks333 picture anks333  ·  3Komentar