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
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.
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) : ''}`;
}),
);
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
El siguiente enlace me ha funcionado:
https://stackoverflow.com/questions/51012150/winston-3-0-colorize-whole-output-on-console
Comentario más útil
Pude hacer que funcionara parcialmente usando la documentación para logform .
No estoy seguro de cómo manejar el volcado de los argumentos JSON.
Actualizar aquí es lo que resolví: