Winston: مشاركة نفس النقل مع تسميات مختلفة

تم إنشاؤها على ٣٠ أكتوبر ٢٠١٥  ·  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 ،

أنا على winston 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"}

يمكنك تحقيق ذلك عن طريق إضافة كائن ساحر يحتوي على الحقل "label" في معلمات وظيفة التسجيل ، على سبيل المثال:
للتنسيق التالي:

const imLogFormat = printf (معلومات => {
إرجاع ${info.timestamp} [${info.label}] ${info.level}: ${info.message} ؛
}) ؛

يمكنك القيام بما يلي:

logger.error ('لدي الخطأ التالي' + err، {label: "Class1"})
logger.error ('لدي الخطأ التالي' + err، {label: "Class2"})

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات