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中启动的或者没有,但我没有这方面的经验,所以不知道这是否可能。