web-dev-qa-db-fra.com

Désactiver l'enregistrement Winston lors de l'exécution de tests unitaires?

La journalisation Winston peut-elle être désactivée de manière sélective lors de l'exécution de tests unitaires d'un module de nœud? 

Idéalement, j'aimerais que la journalisation serve à des fins d'information et de débogage lorsque l'application est en cours d'exécution, mais qu'elle soit supprimée afin de ne pas encombrer les résultats des tests d'unité de présentation lors de l'exécution de mes tests.

Mon utilisation de winston est interne à mon module, quelque chose comme ceci:

// MyModule.js
var logger = require('winston');
module.exports = function() {
  // does some stuff
  // and logs some stuff like so:
  logger.log('an informational message');
}

// MyModuleTest.js
describe('MyModule', fucntion() {
  it('should do some stuff', function() {
     var myModuleUnderTest = require('MyModule');
     // some tests
  }
}   
12
Sk606

Les transports Winston ont une propriété silent que vous pouvez définir, ce qui est probablement un peu plus agréable que de supprimer tout le transport.

J'ajoute un nom aux transports pour que ce soit un peu plus facile comme ceci:

var logger = new winston.Logger();

logger.add(winston.transports.Console, {
    name: 'console.info',
    colorize: true,
    showLevel: true,
    formatter: consoleFormatter,
})

Ensuite, lors du test ou de la configuration, je peux activer et désactiver la journalisation de manière sélective avec:

logger.transports['console.info'].silent = true  // turns off
logger.transports['console.info'].silent = false // logging back on
10
Mark Meyer

Désolé, je sais que c'est une question un peu ancienne.

Ce que je fais est un peu moche, mais me permet de continuer à utiliser l’option --silent de Jest normalement. Je viens de mettre la silent de Winston sur process.argv.indexOf("--silent") >= 0. Par exemple:

const logger = new winston.Logger({
  …,
  transports: [
    new winston.transports.Console({
      …,
      silent: process.argv.indexOf("--silent") >= 0,
    }),
  ],
});
5
Rubén Illodo Brea

Créer un enregistreur:

const logger = createLogger({
    level: "info",
    format: format.json(),
    transports: []
});

Faire taire toute la journalisation:

logger.transports.forEach((t) => (t.silent = true));
1
shusson

La configuration n'a pas fonctionné pour moi, j'utilise winston v3.1.0, il existe un nouveau moyen de créer des enregistreurs.

Sur le site winston: https://github.com/winstonjs/winston

La méthode recommandée pour utiliser winston consiste à créer votre propre enregistreur. La méthode la plus simple consiste à utiliser winston.createLogger:

const logger = winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    transports: [
      //
      // - Write to all logs with level `info` and below to `combined.log` 
      // - Write all logs error (and below) to `error.log`.
      //
      new winston.transports.File({ filename: 'error.log', level: 'error' }),
      new winston.transports.File({ filename: 'combined.log' })
    ]
  });

  //
  // If we're not in production then log to the `console` with the format:
  // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
  // 
  if (process.env.NODE_ENV !== 'production') {
    logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

Donc je le fais dans mon logger.js

if (process.env.NODE_ENV === 'test') {
    return winston.createLogger({
      transports: [ new winston.transports.Console({ level: 'error'}) ]
    });
}

Cela arrête tous les messages du journal sauf en cas d'erreur, ce que j'aimerais voir pour vous aider à résoudre les problèmes éventuels.

J'espère que cela t'aides.

1
englishPete

Voici ma configuration:

const { createLogger, format, transports, config } = require("winston");

let level, silent;
switch (process.env.NODE_ENV) {
  case "production":
    level = "warning";
    silent = false;
    break;
  case "test":
    level = "emerg";
    silent = true;
    break;
  default:
    level = "debug";
    silent = false;
    break;
}

const options = {
  console: {
    level,
    silent,
    handleExceptions: true,
    format: format.combine(
      format.colorize(),
      format.splat(),
      format.printf(
        info => `${new Date().toISOString()} ${info.level}: ${info.message}`,
      ),
    ),
  },
};

const logger = createLogger({
  levels: config.syslog.levels,
  transports: [new transports.Console(options.console)],
  exitOnError: false,
});

module.exports = logger;
0
Joel