winston 在文本中保存颜色格式化程序,如何删除它但仍然显示颜色?
winston saves color formatter in text, how to remove this but still show color?
我正在尝试使用 winston
作为日志框架创建一个日志模块。它允许我指定颜色,如果传输是 Console
,这非常好,但如果我要定义两种传输,一种 Console
,一种 File
,它实际上会保存终端文本中的格式化字符串,将保存在文件中。
const { addColors, createLogger, format, transports } = require('winston');
const { combine, colorize, printf, timestamp } = format;
const logFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const rawFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const config = require('../config');
const logger = createLogger({
level: config.DEBUG,
format: combine(
colorize(),
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
logFormat,
),
transports: [
new transports.File({
filename: 'combined.log',
}),
new transports.Console({ format: combine(timestamp(), rawFormat) }),
],
});
addColors({
debug: 'white',
error: 'red',
info: 'green',
warn: 'yellow',
});
module.exports = logger;
控制台将如下所示:
[2018-06-12 15:54:14] info: Listening on port 9000
其中 info
颜色为绿色,但如果我查看 combine.log
文件,它将显示为:
[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000
是否可以将原始文本记录到文件中,但仍然在终端中显示颜色?
如果没有,是否有另一个库允许这样做?说 bunyan
?
我不知道你是否还需要这个,但迟到总比不到好。
基本上你只需要从你定义的通用格式中删除colorzie()
然后在你想要显示颜色的指定传输中使用它。
var options = {
console: {
handleExceptions: true,
level: 'debug',
format: combine(colorize(), myFormat)
},
verbose: {
filename: './logs/debug/mobile_api-%DATE%.log',
level: 'debug',
format: combine(myFormat)
},
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
new transports.Console(options.console),
new transports.file(options.verbose),
]
});
有了这个,当日志在控制台打印时,你可以看到颜色,而当写入文件时,它根本不会显示任何颜色代码。
您可以使用 winston.format
中的 uncolorized
方法。在 logform's documentation.
中了解它
我正在尝试使用 winston
作为日志框架创建一个日志模块。它允许我指定颜色,如果传输是 Console
,这非常好,但如果我要定义两种传输,一种 Console
,一种 File
,它实际上会保存终端文本中的格式化字符串,将保存在文件中。
const { addColors, createLogger, format, transports } = require('winston');
const { combine, colorize, printf, timestamp } = format;
const logFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const rawFormat = printf((info) => {
return `[${info.timestamp}] ${info.level}: ${info.message}`;
});
const config = require('../config');
const logger = createLogger({
level: config.DEBUG,
format: combine(
colorize(),
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
logFormat,
),
transports: [
new transports.File({
filename: 'combined.log',
}),
new transports.Console({ format: combine(timestamp(), rawFormat) }),
],
});
addColors({
debug: 'white',
error: 'red',
info: 'green',
warn: 'yellow',
});
module.exports = logger;
控制台将如下所示:
[2018-06-12 15:54:14] info: Listening on port 9000
其中 info
颜色为绿色,但如果我查看 combine.log
文件,它将显示为:
[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000
是否可以将原始文本记录到文件中,但仍然在终端中显示颜色?
如果没有,是否有另一个库允许这样做?说 bunyan
?
我不知道你是否还需要这个,但迟到总比不到好。
基本上你只需要从你定义的通用格式中删除colorzie()
然后在你想要显示颜色的指定传输中使用它。
var options = {
console: {
handleExceptions: true,
level: 'debug',
format: combine(colorize(), myFormat)
},
verbose: {
filename: './logs/debug/mobile_api-%DATE%.log',
level: 'debug',
format: combine(myFormat)
},
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
new transports.Console(options.console),
new transports.file(options.verbose),
]
});
有了这个,当日志在控制台打印时,你可以看到颜色,而当写入文件时,它根本不会显示任何颜色代码。
您可以使用 winston.format
中的 uncolorized
方法。在 logform's documentation.