49 votes

TypeError : winston.Logger n'est pas un constructeur avec winston et morgan

J'ai essayé avec Winston para logger . J'ai utilisé dans un projet leur Il fonctionne bien quand je copier-coller le code de leur au projet actuel existant que je fais face à un problème comme TypeError: winston.Logger is not a constructor

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

TypeError : winston.Logger n'est pas un constructeur

Veuillez me guider, pourquoi cette erreur et ce que je dois faire pour résoudre ce problème.

"morgan" : "^1.9.0", "winston" : "^3.0.0"

Voici mon code dans logger.js fichier.

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

124voto

Arif Khan Points 2588

Comme vous le mentionnez, vous utilisez 3.0.0 vous ne pouvez pas ne pas utiliser winston.Logger vous pouvez vous référer au code de la bibliothèque( https://github.com/winstonjs/winston/blob/master/lib/winston.js#L178 )

Vous devez faire une petite mise à jour dans votre code, utilisez winston.createLogger au lieu de new (winston.Logger)

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

1 votes

Ici est le commit où cette refactorisation a eu lieu.

0 votes

Cela rend winston inutile si vous voulez personnaliser la classe du logger.

0 votes

Qu'est-ce que les options ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X