温斯顿将颜色格式化程序保存在文本中,如何删除它但仍显示颜色?

Posted

技术标签:

【中文标题】温斯顿将颜色格式化程序保存在文本中,如何删除它但仍显示颜色?【英文标题】:winston saves color formatter in text, how to remove this but still show color? 【发布时间】:2018-11-22 07:43:42 【问题描述】:

我正在尝试使用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

【问题讨论】:

【参考方案1】:

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

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

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),
]
);

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

【讨论】:

【参考方案2】:

您可以使用winston.format 中的uncolorized 方法。在logform's documentation 中阅读它。

【讨论】:

以上是关于温斯顿将颜色格式化程序保存在文本中,如何删除它但仍显示颜色?的主要内容,如果未能解决你的问题,请参考以下文章

从应用程序中删除了核心位置,但仍被要求提供用户位置

如何应用亮度控制和更改文本颜色?

Swift:写入 JSON 并在本地保存到 iPhone 文件

温斯顿:如何更改时间戳格式

如何将数据保存为给定格式的文本文件?

如何保存富文本框的背景颜色及其其他内容