Winston 3.0 为控制台上的整个输出着色
Winston 3.0 colorize whole output on console
我正在开发一个 Node.js 应用程序,使用 babel-cli as an ES6 transpiler and I am using Winston 3.0 作为我的日志记录服务。
问题:
我希望 winston 记录器的消息的整个输出都以彩色显示,不仅是标签和消息,还有时间戳。我知道,在 Winston 2.x 中,这在某些方面是可能的(虽然不知道如何实现)。
我已经尝试过 winston color and winston-console-formatter 等不同的 NPM 包,但它们似乎不起作用。
我定义了我的记录器如下:
import winston from 'winston'
let alignColorsAndTime = winston.format.combine(
winston.format.colorize({
all:true
}),
winston.format.label({
label:'[LOGGER]'
}),
winston.format.timestamp({
format:"YY-MM-DD HH:MM:SS"
}),
winston.format.printf(
info => ` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
export const logger = winston.createLogger({
level: "debug",
transports: [
new (winston.transports.Console)({
format: alignColorsAndTime
})
],
});
输出仍然是这样的:
虽然我更希望它看起来像这样:
试试下面的代码。它将结合两种格式。它对我有用。
let alignColorsAndTime = winston.format.combine(
winston.format.colorize({
all:true
}),
winston.format.label({
label:'[LOGGER]'
}),
winston.format.timestamp({
format:"YY-MM-DD HH:mm:ss"
}),
winston.format.printf(
info => ` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
export const logger = winston.createLogger({
level: "debug",
transports: [
new (winston.transports.Console)({
format: winston.format.combine(winston.format.colorize(), alignColorsAndTime)
})
],
});
注意填充必须处理颜色。例如:
const padding= info.level.length <= 7?7:17; //padding differently if it has colour.
${info.level.padEnd(padding,' ')}
测试:
"winston": "^3.1.0"
另一个想法:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const colorizer = winston.format.colorize();
const logger = winston.createLogger({
levels: {
error: 0,
warn: 1,
info: 2,
debug: 4
},
format: combine(
winston.format.timestamp(),
winston.format.simple(),
winston.format.printf(msg =>
colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
)
),
transports: [
new (winston.transports.Console)({
// format: winston.format.combine(winston.format.colorize(), alignColorsAndTime),
prettyPrint: true,
colorize: true,
timestamp: true,
}),
],
});
来自这个posthttps://github.com/winstonjs/winston/issues/1388
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(),
]
});
只需使用addColors()
方法
const { createLogger, format, transports, addColors } = require('winston');
const { combine, colorize, label, timestamp, json, prettyPrint, printf } = format;
require('winston-mongodb');
let myCustomFormat = format.combine(
colorize({ all: true }),
label({ label: '[LOGGER]' }),
timestamp({ format: 'YY-MM-DD HH:MM:SS' }),
printf(
(info) =>
` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
addColors({
info: 'bold blue', // fontStyle color
warn: 'italic yellow',
error: 'bold red',
debug: 'green',
});
const logger = createLogger({
level: 'info',
transports: [new transports.Console({ format: combine(myCustomFormat) })],
});
这对我自定义颜色和字体样式很有用。
文档中的可能选项如下。
Font styles: bold, dim, italic, underline, inverse, hidden, strikethrough.
Font foreground colors: black, red, green, yellow, blue, magenta, cyan, white, gray, grey.
Background colors: blackBG, redBG, greenBG, yellowBG, blueBG magentaBG, cyanBG, whiteBG
这会将时间着色并以可读格式显示。并将所有错误也存储到一个文件中!
import { createLogger, format, transports } from 'winston'
const loggerFormat = format.combine(
format.timestamp(),
format.printf((info) => {
return `${info.timestamp} - [${info.level.toUpperCase().padEnd(7)}]: ${
info.message
}`
}),
format.colorize({
all: true,
})
)
const logger = createLogger({
format: loggerFormat,
transports: [
new transports.Console({ level: 'silly' }),
new transports.File({ filename: 'error.log', level: 'error' }),
],
})
export default logger
我正在开发一个 Node.js 应用程序,使用 babel-cli as an ES6 transpiler and I am using Winston 3.0 作为我的日志记录服务。
问题:
我希望 winston 记录器的消息的整个输出都以彩色显示,不仅是标签和消息,还有时间戳。我知道,在 Winston 2.x 中,这在某些方面是可能的(虽然不知道如何实现)。
我已经尝试过 winston color and winston-console-formatter 等不同的 NPM 包,但它们似乎不起作用。
我定义了我的记录器如下:
import winston from 'winston'
let alignColorsAndTime = winston.format.combine(
winston.format.colorize({
all:true
}),
winston.format.label({
label:'[LOGGER]'
}),
winston.format.timestamp({
format:"YY-MM-DD HH:MM:SS"
}),
winston.format.printf(
info => ` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
export const logger = winston.createLogger({
level: "debug",
transports: [
new (winston.transports.Console)({
format: alignColorsAndTime
})
],
});
输出仍然是这样的:
虽然我更希望它看起来像这样:
试试下面的代码。它将结合两种格式。它对我有用。
let alignColorsAndTime = winston.format.combine(
winston.format.colorize({
all:true
}),
winston.format.label({
label:'[LOGGER]'
}),
winston.format.timestamp({
format:"YY-MM-DD HH:mm:ss"
}),
winston.format.printf(
info => ` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
export const logger = winston.createLogger({
level: "debug",
transports: [
new (winston.transports.Console)({
format: winston.format.combine(winston.format.colorize(), alignColorsAndTime)
})
],
});
注意填充必须处理颜色。例如:
const padding= info.level.length <= 7?7:17; //padding differently if it has colour.
${info.level.padEnd(padding,' ')}
测试:
"winston": "^3.1.0"
另一个想法:
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, printf } = format;
const colorizer = winston.format.colorize();
const logger = winston.createLogger({
levels: {
error: 0,
warn: 1,
info: 2,
debug: 4
},
format: combine(
winston.format.timestamp(),
winston.format.simple(),
winston.format.printf(msg =>
colorizer.colorize(msg.level, `${msg.timestamp} - ${msg.level}: ${msg.message}`)
)
),
transports: [
new (winston.transports.Console)({
// format: winston.format.combine(winston.format.colorize(), alignColorsAndTime),
prettyPrint: true,
colorize: true,
timestamp: true,
}),
],
});
来自这个posthttps://github.com/winstonjs/winston/issues/1388
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(),
]
});
只需使用addColors()
方法
const { createLogger, format, transports, addColors } = require('winston');
const { combine, colorize, label, timestamp, json, prettyPrint, printf } = format;
require('winston-mongodb');
let myCustomFormat = format.combine(
colorize({ all: true }),
label({ label: '[LOGGER]' }),
timestamp({ format: 'YY-MM-DD HH:MM:SS' }),
printf(
(info) =>
` ${info.label} ${info.timestamp} ${info.level} : ${info.message}`
)
);
addColors({
info: 'bold blue', // fontStyle color
warn: 'italic yellow',
error: 'bold red',
debug: 'green',
});
const logger = createLogger({
level: 'info',
transports: [new transports.Console({ format: combine(myCustomFormat) })],
});
这对我自定义颜色和字体样式很有用。
文档中的可能选项如下。
Font styles: bold, dim, italic, underline, inverse, hidden, strikethrough.
Font foreground colors: black, red, green, yellow, blue, magenta, cyan, white, gray, grey.
Background colors: blackBG, redBG, greenBG, yellowBG, blueBG magentaBG, cyanBG, whiteBG
这会将时间着色并以可读格式显示。并将所有错误也存储到一个文件中!
import { createLogger, format, transports } from 'winston'
const loggerFormat = format.combine(
format.timestamp(),
format.printf((info) => {
return `${info.timestamp} - [${info.level.toUpperCase().padEnd(7)}]: ${
info.message
}`
}),
format.colorize({
all: true,
})
)
const logger = createLogger({
format: loggerFormat,
transports: [
new transports.Console({ level: 'silly' }),
new transports.File({ filename: 'error.log', level: 'error' }),
],
})
export default logger