【问题标题】:Strange symbols in log with winstonwinston 日志中的奇怪符号
【发布时间】:2016-04-21 18:29:30
【问题描述】:

初始化:

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

我该如何解决?

【问题讨论】:

  • 您是否将控制台输出记录到 Ubuntu 服务器上的文件中?那些奇怪的符号是颜色代码转义,它们用于控制台记录器。如果要登录到文件,请使用文件传输,或禁用 colorize。
  • @robertklep supervisord 将其记录到文件中。

标签: node.js winston


【解决方案1】:

您看到的代码是颜色代码转义。它们仅在登录到终端/控制台时有用,因为它们被终端解释以更改文本颜色。如果日志最终保存在一个文件中,则代码将按原样存储,并没有真正的用处。

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

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

有关isTTY 标志here 的更多信息。

【讨论】:

  • colorize: process.stdout.isTTY 在 IDEA 和文件中都没有颜色。
  • IDEA 也可能不是一个合适的终端,尽管它可能支持颜色代码。在这种情况下,您需要找到一种方法来确定该应用程序是否在 IDEA 中启动,但我没有这方面的经验,所以不知道这是否可能。
【解决方案2】:

万一你不能解决这个问题..我刚才能解决。

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 变量允许它。开箱即用的格式化程序都无法翻译颜色代码转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2012-11-21
    • 2015-05-21
    • 2017-03-16
    相关资源
    最近更新 更多