最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

winston在文本中保存颜色格式化,如何删除这个但仍显示颜色?

IT培训 admin 3浏览 0评论

winston在文本中保存颜色格式化,如何删除这个但仍显示颜色?

我正在尝试使用winston作为日志框架创建日志记录模块。它允许我指定颜色,如果传输是Console,这是非常好的,但如果我要定义两个传输,一个Console,一个File,它实际上将保存终端格式化程序字符串在文本中,将保存在文件。

const { addColors, createLogger, format, transports } = require('winston');

const { combine, colorize, printf, timestamp } = format;

const logFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const rawFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const config = require('../config');

const logger = createLogger({
  level: config.DEBUG,
  format: combine(
    colorize(),
    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    logFormat,
  ),
  transports: [
    new transports.File({
      filename: 'combined.log',
    }),
    new transports.Console({ format: combine(timestamp(), rawFormat) }),
  ],
});

addColors({
  debug: 'white',
  error: 'red',
  info: 'green',
  warn: 'yellow',
});

module.exports = logger;

控制台将如下所示:

[2018-06-12 15:54:14] info: Listening on port 9000

其中info被着色为绿色,但如果我查看combine.log文件,它将显示为:

[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000

是否可以将原始文本记录到文件中,但仍然在终端中显示颜色?

如果没有,是否有另一个库允许这个?说bunyan

回答如下:

我不知道你是否需要这个,但迟到总比没有好。

基本上你只需要删除已定义的colorzie()from通用格式,然后在要显示颜色的指定传输中使用它。

var options = {
    console: {
        handleExceptions: true,
        level: 'debug',
        format: combine(colorize(), myFormat)
    },
    verbose: {
        filename: './logs/debug/mobile_api-%DATE%.log',
        level: 'debug',
        format: combine(myFormat)
    },
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
    new transports.Console(options.console),
    new transports.file(options.verbose),
]
});

这样,当日志在控制台中打印时,您可以看到颜色,当写入文件时,它根本不会显示任何颜色代码。

winston在文本中保存颜色格式化,如何删除这个但仍显示颜色?

我正在尝试使用winston作为日志框架创建日志记录模块。它允许我指定颜色,如果传输是Console,这是非常好的,但如果我要定义两个传输,一个Console,一个File,它实际上将保存终端格式化程序字符串在文本中,将保存在文件。

const { addColors, createLogger, format, transports } = require('winston');

const { combine, colorize, printf, timestamp } = format;

const logFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const rawFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const config = require('../config');

const logger = createLogger({
  level: config.DEBUG,
  format: combine(
    colorize(),
    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    logFormat,
  ),
  transports: [
    new transports.File({
      filename: 'combined.log',
    }),
    new transports.Console({ format: combine(timestamp(), rawFormat) }),
  ],
});

addColors({
  debug: 'white',
  error: 'red',
  info: 'green',
  warn: 'yellow',
});

module.exports = logger;

控制台将如下所示:

[2018-06-12 15:54:14] info: Listening on port 9000

其中info被着色为绿色,但如果我查看combine.log文件,它将显示为:

[2018-06-12 15:54:14] [32minfo[39m: Listening on port 9000

是否可以将原始文本记录到文件中,但仍然在终端中显示颜色?

如果没有,是否有另一个库允许这个?说bunyan

回答如下:

我不知道你是否需要这个,但迟到总比没有好。

基本上你只需要删除已定义的colorzie()from通用格式,然后在要显示颜色的指定传输中使用它。

var options = {
    console: {
        handleExceptions: true,
        level: 'debug',
        format: combine(colorize(), myFormat)
    },
    verbose: {
        filename: './logs/debug/mobile_api-%DATE%.log',
        level: 'debug',
        format: combine(myFormat)
    },
}
const logger = winston.createLogger({
levels: myCustomLevels.levels,
transports: [
    new transports.Console(options.console),
    new transports.file(options.verbose),
]
});

这样,当日志在控制台中打印时,您可以看到颜色,当写入文件时,它根本不会显示任何颜色代码。

发布评论

评论列表 (0)

  1. 暂无评论