winston

时间:2016-01-16 03:50:11

标签: 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,
        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

我该如何解决?

2 个答案:

答案 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变量是允许使用的变量。开箱即用的格式化程序都无法转换颜色代码转义符。