web-dev-qa-db-ja.com

TypeError:winston.Loggerはwinstonとmorganのコンストラクターではありません

Winstonloggerを試しました。 1つのプロジェクトで使用しました。コードをコピーして既存のプロジェクトに貼り付けると、TypeError: winston.Logger is not a constructorなどの問題に直面するよりもうまく機能します

let logger = new(winston.Logger)({^

TypeError:winston.Loggerはコンストラクターではありません

このエラーの理由と、この問題を解決するために何をしなければならないのかを教えてください。

「morgan」:「^ 1.9.0」、「winston」:「^ 3.0.0」

logger.jsファイルのコードは次のとおりです。

var appRoot = require('app-root-path');
var winston = require('winston');

var options = {
  file: {
    level: 'info',
    name: 'file.info',
    filename: `${appRoot}/logs/app.log`,
    handleExceptions: true,
    json: true,
    maxsize: 5242880, // 5MB
    maxFiles: 100,
    colorize: true,
  },
  errorFile: {
    level: 'error',
    name: 'file.error',
    filename: `${appRoot}/logs/error.log`,
    handleExceptions: true,
    json: true,
    maxsize: 5242880, // 5MB
    maxFiles: 100,
    colorize: true,
  },
  console: {
    level: 'debug',
    handleExceptions: true,
    json: false,
    colorize: true,
  },
};


// your centralized logger object
let logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)(options.console),
    new (winston.transports.File)(options.errorFile),
    new (winston.transports.File)(options.file)
  ],
  exitOnError: false, // do not exit on handled exceptions
});
35
higunjan

あなたが言及したように、あなたは3.0.0を使用しています、winston.Loggerを使用することはできません、あなたはライブラリコードを参照することができます( https://github.com/winstonjs/winston/blob/master/ lib/winston.js#L178

コードを少し更新する必要があります。new (winston.Logger)の代わりにwinston.createLoggerを使用します

// your centralized logger object
let logger = winston.createLogger({
  transports: [
    new (winston.transports.Console)(options.console),
    new (winston.transports.File)(options.errorFile),
    new (winston.transports.File)(options.file)
  ],
  exitOnError: false, // do not exit on handled exceptions
});
77
Arif Khan