初始化:
var winston = require('winston');
var logger = new (winston.Logger)({
levels: {
trace: 0,
input: 1,
verbose: 2,
prompt: 3,
debug: 4,
info: 5,
data: 6,
help: 7,
warn: 8,
error: 9
},
colors: {
trace: 'magenta',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
debug: 'blue',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
error: 'red'
}
});
logger.add(winston.transports.Console, {
level: 'error',
prettyPrint: true,
colorize: true,
silent: false,
timestamp: false,
json: false
});
例如我像这样调用logger:
logger.info("isSandBox: " + isSandBox);
在我的IDEA中,我看到了:
info:isSandBox:true
但是当我将这个脚本上传到Ubuntu服务器时,我在日志中看到了:
^ [[32minfo ^ [[39m:isSandBox:true
我该如何解决?
答案 0 :(得分:4)
您看到的代码是颜色代码转义。它们仅在登录终端/控制台时有用,因为它们会被终端解释为更改文本颜色。如果日志最终存在于文件中,则代码按原样存储,并且实际上并不实用。
您可以检查输出是否为终端,并且仅在以下情况下启用着色:
logger.add(winston.transports.Console, {
level : 'error',
prettyPrint : true,
colorize : process.stdout.isTTY,
silent : false,
timestamp : false,
json : false
});
有关isTTY
标记here的更多信息。
答案 1 :(得分:1)
以防万一您无法解决这个问题。.我现在才能够解决。
const { createLogger, format, transports } = require('winston');
const { combine, timestamp, label, colorize, printf } = format;
const myFormat = printf(info => {
return `${info.timestamp} ${info.label} ${info.level}: ${info.message}`;
});
const logger = createLogger({
format: combine(
colorize(),
label({ label: '[app-server]' }),
timestamp(),
myFormat
),
transports: [new transports.Console()]
});
module.exports = logger;
myFormat变量是允许使用的变量。开箱即用的格式化程序都无法转换颜色代码转义符。