Winston: El registro de la consola no está coloreado.

Creado en 10 nov. 2017  ·  22Comentarios  ·  Fuente: winstonjs/winston

Estoy tratando de colorear la salida de la consola y no funciona. La salida es del mismo color (blanco). Estoy en 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}));

También probé la sugerencia aquí, pero tampoco funciona:

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

Gracias,
Álvaro

Comentario más útil

Pude hacer que funcionara parcialmente usando la documentación para 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}`),
  );

No estoy seguro de cómo manejar el volcado de los argumentos JSON.

Actualizar aquí es lo que resolví:

  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

Todos 22 comentarios

Pude hacer que funcionara parcialmente usando la documentación para 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}`),
  );

No estoy seguro de cómo manejar el volcado de los argumentos JSON.

Actualizar aquí es lo que resolví:

  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

Después de dos horas logré que los colores funcionaran, ¡gracias @Xeoncross !

empezó winston y también consiguió consola sin colores...
estaba usando el siguiente código de definición de transporte:

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

Después de leer este hilo, me gustó esto:

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

y no obtuve diferencia.
así que cambié la posición del formato de colorear al primero y obtuve los colores funcionando

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

Gracias @abrakadobr ! eso hizo el truco.

aquí nada funcionó para mí, todavía no hay colores, y cambiar el color a la parte superior hizo que el campo de información registrara cadenas codificadas

Creé una esencia que muestra cómo usar el registro de winston & morgan en una aplicación expressjs simple.

¡Gracias @Xeoncross! Agregar winston.format.colorize() a mi formato funcionó. Es interesante que esto no esté en los documentos. O al menos no pude encontrarlo en los documentos.

Me encanta la nueva flexibilidad, pero espero que obtenga una mejor documentación. Pasé demasiado tiempo haciendo que esto funcionara. Un ejemplo plug-n-play para aquellos de nosotros que estábamos usando winston.cli() ayudaría mucho, algo similar al ejemplo de @Xeoncross.

¿Alguien sabe cómo hacerlo con la versión de lanzamiento actual? Una versión candidata a lanzamiento no es una opción.

Al leer el código, también puede enviar all al colorize como una opción para colorear todo el registro.

colorize({ all: true })

@markhealey Ya eliminé la dependencia de Winston de mi paquete.json y luego leí su mensaje. Gracias :+1:

Gracias @Xeoncross. Eche un vistazo a: https://github.com/winstonjs/logform/blob/master/timestamp.js . Puede formatear la marca de tiempo con format opt param. Pero ten cuidado con la zona horaria

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} realmente no funciona si se incluye la marca de tiempo, aquí hay un ejemplo de trabajo para colorear toda la línea:

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(),
  ]

});

verifique mi registrador con todas las funciones

Gracias @abrakadobr , tu solución funcionó para mí.

@tommuhm Veo el defecto ahora. No hay una opción de formato incorporada para colorize si uno realmente quiere colorear todo el printf . ¿Tiene sentido esto para ti?

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

La parte complicada es tener el colorizer conocido cuando un info ha sido "serializado" (es decir, cuando info[MESSAGE] se ha establecido en una cadena). Seguimiento PR a logform breve. ¡Gracias por investigarlo!

@Xeoncross también podemos lograr lo mismo de una manera mucho más 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()]
});

referencia: https://www.npmjs.com/package/winston#using -custom-logging-levels

Estoy usando Winston para iniciar sesión en CloudWatch y tratar de agregar color, pero en lugar de símbolos de color aparecen. Intento todas las soluciones mencionadas anteriormente. a continuación está mi código

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

y en la salida de la consola de cloudwatch es

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

este [39m aparece en lugar de color. ¿Cualquier sugerencia?

-22T13:00:03.325Z - depuración: res por id: [

Yo también tengo el mismo problema. Conseguiste arreglarlo?

-22T13:00:03.325Z - depuración: res por id: [

Yo también tengo el mismo problema. Conseguiste arreglarlo?

¿Alguna actualización sobre eso? ¿Lo solucionaste de alguna manera?

@Xeoncross también podemos lograr lo mismo de una manera mucho más 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()]
});

referencia: https://www.npmjs.com/package/winston#using -custom-logging-levels

Eso funcionó para mí en iTerm en MacOS

¿Fue útil esta página
0 / 5 - 0 calificaciones