winston 日志中的奇怪符号

Strange symbols in log with 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,
        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);

在我的 IDEA 中我看到:

info: isSandBox: true

但是当我将此脚本上传到 Ubuntu 服务器时,我在日志中看到:

^[[32minfo^[[39m: isSandBox: true

我该如何解决?

您看到的代码是颜色代码转义。它们仅在登录到 terminal/console 时有用,因为它们会被终端解释为更改文本颜色。如果日志最终保存在文件中,则代码会被存储 as-is,并没有多大用处。

您可以检查输出是否为终端,并且仅在终端为以下时才启用着色:

logger.add(winston.transports.Console, {
    level       : 'error',
    prettyPrint : true,
    colorize    : process.stdout.isTTY,
    silent      : false,
    timestamp   : false,
    json        : false
});

有关 isTTY 标志的更多信息 here

万一你没能解决这个问题..我现在能解决了。

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 变量允许它。 None 的开箱即用格式化程序能够转换颜色代码转义。