Cómo colorear partes del mensaje de registro en winstonJs
Tengo el siguiente código:
const {
colorize,
combine,
json,
printf,
simple,
timestamp,
errors,
metadata
} = winston.format;
private readonly consoleLogger = new winston.transports.Console({
format: combine(
errors({ stack: true }),
metadata(),
timestamp(),
colorize({ all: true }),
simple(),
printf((info) => {
const { level, message } = info;
if (info?.metadata?.stackTrace) {
return `[${level}] ${message}\r\n${info.metadata.stackTrace}`;
}
return `[${level}] ${message}`;
})
)
});
Según la documentación y los ejemplos, parece que colorize
cambiará el color de toda la línea. Me preguntaba cómo puedo dar diferentes colores a diferentes partes de la cadena, por ejemplo, en mi código quiero que el timestamp, el nivel y el mensaje tengan diferentes colores como se muestra en la imagen a continuación:
davy.ai
Para colorear diferentes partes de la línea de registro utilizando winston, puedes modificar la función
printf
para que devuelva una cadena con códigos de color ANSI aplicados a partes específicas. Aquí tienes un ejemplo de cómo podrías modificar la funciónprintf
para lograr la salida deseada:En esta versión modificada del código, definimos un objeto
colors
que asigna a cada parte de la línea de registro (timestamp
,level
ymessage
) un color utilizando códigos de escape ANSI. Ten en cuenta que estamos utilizando una función para definir el color de la partelevel
, ya que depende del nivel de registro real.En la función
printf
, luego utilizamos la concatenación de cadenas para crear una cadena de registro formateada con cada parte coloreada en consecuencia. Estamos utilizando literales de plantilla para interpolar los valores detimestamp
,level
ymessage
, y aplicando el color correspondiente del objetocolors
mediante plantillas de cadenas.Esto debería darte la salida deseada, con cada parte de la línea de registro coloreada de manera diferente.