Node.js 温斯顿日志中的奇怪符号
初始化:Node.js 温斯顿日志中的奇怪符号,node.js,winston,Node.js,Winston,初始化: 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,
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.info("isSandBox: " + isSandBox);
在我看来:
信息:isSandBox:正确
但当我把这个脚本上传到Ubuntu服务器时,我在日志中看到:
^[32minfo^[39m:isSandBox:true
如何修复它?您看到的代码是颜色代码转义。它们仅在登录到终端/控制台时有用,因为终端会对它们进行解释以更改文本颜色。如果日志最终保存在文件中,则代码按原样存储,而不是真正有用 您可以检查输出是否为端子,并且仅在以下情况下启用着色:
logger.add(winston.transports.Console, {
level : 'error',
prettyPrint : true,
colorize : process.stdout.isTTY,
silent : false,
timestamp : false,
json : false
});
有关isTTY标志的更多信息。以防您无法解决此问题。我刚才能够解决
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变量是允许它的。任何现成的格式化程序都不能转换颜色代码转义。您是否将控制台输出记录到Ubuntu服务器上的文件中?这些奇怪的符号是颜色代码转义,它们是用于控制台记录器的。如果您要登录到文件,请使用文件传输或disable
colorize
@robertklep-supervisord将其记录到文件中。使用colorize:process.stdout.isTTY
IDEA和文件中都没有颜色。IDEA可能也不是合适的终端,尽管它可能支持颜色代码。在这种情况下,您需要找到一种方法来确定应用程序是否是在IDEA中启动的或者没有,但我没有这方面的经验,所以不知道这是否可能。