Winston: La journalisation de la console n'est pas colorisée.

Créé le 10 nov. 2017  ·  22Commentaires  ·  Source: winstonjs/winston

J'essaie de coloriser la sortie de la console et cela ne fonctionne pas. La sortie est de la même couleur (blanche). Je suis sur 3.0.0-rc1.

const winston = require('winston');
const logLevels = {
  levels: {
    error: 0,
    warn: 1,
    info: 2,
    http: 3,
    sql: 4,
    debug: 5
  },
  colors: {
    error: "red",
    warn: "darkred",
    info: "black",
    http: "green",
    sql: "blue",
    debug: "gray"
  }
};
winston.addColors(logLevels);
const logger = winston.createLogger({...});
logger.add(new winston.transports.Console({colorize: true}));

J'ai aussi essayé la suggestion ici mais cela ne fonctionne pas non plus:

logger.add(new winston.transports.Console({format: winston.format.combine(formatter, winston.format.colorize())}));

Merci,
Álvaro

Commentaire le plus utile

J'ai pu le faire fonctionner partiellement en utilisant la documentation de logform .

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

Vous ne savez pas comment gérer le vidage des arguments JSON.

Mise à jour voici ce que j'ai travaillé:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

Tous les 22 commentaires

J'ai pu le faire fonctionner partiellement en utilisant la documentation de logform .

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(info => `${info.timestamp} [${info.level}]: ${info.message}`),
  );

Vous ne savez pas comment gérer le vidage des arguments JSON.

Mise à jour voici ce que j'ai travaillé:

  const alignedWithColorsAndTime = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf((info) => {
      const {
        timestamp, level, message, ...args
      } = info;

      const ts = timestamp.slice(0, 19).replace('T', ' ');
      return `${ts} [${level}]: ${message} ${Object.keys(args).length ? JSON.stringify(args, null, 2) : ''}`;
    }),
  );

screen shot 2017-11-13 at 10 55 05 am

Après deux heures, j'ai réussi à faire fonctionner les couleurs, merci @Xeoncross !

a commencé winston et a également obtenu une console sans couleurs ...
j'utilisais le prochain code de définition de transport:

new winston.transports.Console({
  format: winston.format.simple()
})

après avoir lu ce fil, j'ai fait comme ceci:

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.simple(),
            winston.format.colorize()
          )
})

et n'a obtenu aucune différence.
donc j'ai changé la position du format de colorisation en 1er et j'ai fait fonctionner les couleurs

new winston.transports.Console({
  format: winston.format.combine(
            winston.format.colorize(),
            winston.format.simple()
          )
})

Merci @abrakadobr ! ça a fait l'affaire.

rien ici n'a fonctionné pour moi, toujours pas de couleurs, et le déplacement de la colorisation vers le haut a provoqué l'enregistrement des chaînes encodées dans le champ d'informations

J'ai créé un résumé qui montre comment utiliser la journalisation winston & morgan dans une simple application expressjs.

Merci @Xeoncross ! L'ajout de winston.format.colorize() à mon format a fonctionné. Intéressant que ce ne soit pas dans la doc. Ou du moins je ne l'ai pas trouvé dans la doc.

J'adore la nouvelle flexibilité, mais j'espère qu'elle sera mieux documentée. J'ai juste passé trop de temps à faire fonctionner ça. Un exemple plug-n-play pour ceux d'entre nous qui utilisaient winston.cli() irait loin, quelque chose de similaire à l'exemple de @ Xeoncross.

Quelqu'un sait comment faire avec la version actuelle ? Une version release candidate n'est pas une option.

En lisant le code, vous pouvez également envoyer all au colorize comme option pour coloriser l'intégralité du journal.

colorize({ all: true })

@markhealey J'ai déjà supprimé la dépendance Winston de mon package.json, puis j'ai lu votre message. Merci :+1:

Merci @Xeoncross. Jetez un œil à : https://github.com/winstonjs/logform/blob/master/timestamp.js . Vous pouvez formater l'horodatage avec format opt param. Mais attention au fuseau horaire

format.combine(
    format.colorize(),
    format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    format.align(),
    format.printf(info => {
        const { timestamp, level, message, ...extra } = info;

        return `${timestamp} [${level}]: ${message} ${
            Object.keys(extra).length ? JSON.stringify(extra, null, 2) : ''
        }`;
    }),
)

format.colorize({all:true} ne fonctionne pas vraiment si l'horodatage est inclus, voici un exemple de travail pour coloriser toute la ligne :

const colorizer = winston.format.colorize();

const logger = winston.createLogger({
  level: 'debug',
  format: combine(
    winston.format.timestamp(),
    winston.format.simple(),
    winston.format.printf(msg => 
      colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
    )
  ),
  transports: [
    new transports.Console(),
  ]

});

vérifier mon enregistreur complet

Merci @abrakadobr , votre solution a fonctionné pour moi.

@tommuhm Je vois le défaut maintenant. Il n'y a pas d'option de format intégrée pour colorize si l'on veut effectivement coloriser l'intégralité printf . Cela a-t-il un sens pour vous ?

const { createLogger, format, transports } = require('../');

const logger = createLogger({
  level: 'debug',
  format: format.combine(
    format.timestamp(),
    format.simple(),
    format.printf(info => `${info.timestamp} - ${info.level}: ${info.message}`),
    format.colorize({ all: true })
  ),
  transports: [
    new transports.Console(),
  ]
});

logger.error('wowza');

Le plus délicat est de connaître le colorizer lorsqu'un info a été "sérialisé" (c'est-à-dire lorsque info[MESSAGE] a été défini sur une chaîne). Suivi PR à logform sous peu - merci d'avoir fouillé !

@Xeoncross, nous pouvons également réaliser la même chose de manière beaucoup plus simple

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, printf } = format;

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
    return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
    format: combine(colorize(), timestamp(), myFormat),
    transports: [new transports.Console()]
});

référence : https://www.npmjs.com/package/winston#using -custom-logging-levels

J'utilise winston pour me connecter à cloudwatch et essayer d'ajouter de la couleur mais au lieu de symboles de couleur apparaissent. J'essaie toutes les solutions mentionnées ci-dessus. ci-dessous mon code

const winston = require('winston');
const {transports, format, createLogger  } = winston;
const { combine,errors,timestamp} = format;

const colorizer = winston.format.colorize();


const logger = createLogger({
    level:  process.env.LOG_LEVEL,
    prettyPrint : true,
    format: combine(
        winston.format.timestamp(),
        winston.format.simple(),
        winston.format.printf(msg =>
            colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
        )
    ),
    transports: [
        new transports.Console()
    ]
});

module.exports = {logger};

et dans la sortie de la console cloudwatch est

[34m2019-08-22T13:00:03.325Z - debug: res by id: [
{
    "isActive": true,
    "value": "fNUMheWiwXayKsaYCbUeA7Gg7BtEPIUbakB56XH1",
    "id": "oehlwqlcve",
    "userId": "6b347b41-ddef-4842-83a0-1cd5ca358482"
}
][39m

ce [39m apparaît au lieu de la couleur. Toute suggestion?

-22T13:00:03.325Z - débogage : res par identifiant : [

J'ai également le même problème. Avez-vous réussi à le réparer ?

-22T13:00:03.325Z - débogage : res par identifiant : [

J'ai également le même problème. Avez-vous réussi à le réparer ?

Des mises à jour à ce sujet ? L'avez-vous résolu d'une manière ou d'une autre?

@Xeoncross, nous pouvons également réaliser la même chose de manière beaucoup plus simple

const { createLogger, format, transports } = require('winston');
const { combine, timestamp, colorize, printf } = format;

const level = process.env.LOG_LEVEL || 'debug';

const myFormat = printf(({ level, message, label, timestamp }) => {
  return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
  format: combine(colorize(), timestamp(), myFormat),
  transports: [new transports.Console()]
});

référence : https://www.npmjs.com/package/winston#using -custom-logging-levels

Cela a fait l'affaire pour moi dans iTerm sur MacOS

Cette page vous a été utile?
0 / 5 - 0 notes