Winston: 同じトランスポートを異なるラベルで共有する

作成日 2015年10月30日  ·  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

基本的に、すべてのログを1つのファイル/コンソールに入れたいのですが、プレフィックスは異なります。 何か案は?

全てのコメント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 評価