ruby – 在将字符串写入日志文件之前从字符串中删除颜色装饰

前端之家收集整理的这篇文章主要介绍了ruby – 在将字符串写入日志文件之前从字符串中删除颜色装饰前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我像这样使用 ruby记录器:
$logger = Logger.new MultiIO.new($stdout,log_file)

MultiIO是我从this answer获得的一个类.这个很好,大多数,但我使用’有色’rubygem在终端上给彩色输出.不幸的是,这也会在日志文件中结束,因为ANSI转义看起来像[32mPASS [0m或一些类似的不可打印的字符垃圾.

清除日志文件字符串同时保持tty字符串颜色的最佳方法是什么?我不介意猴子修补Logger或MultiIO,但我绝对不希望对日志文件和屏幕进行两次不同的调用.

解决方法

这是我目前的解决方
class ColourBlind
  def initialize(*targets)
     @targets = targets
  end

  def write(*args)
    @targets.each {|t| t.write(*args.map {|x| x.gsub(/\e\[(\d+)m/,'')}.compact)}
  end

  def close
    @targets.each(&:close)
  end
end

然后:

$logger = Logger.new MultiIO.new($stdout,ColourBlind.new(log_file))
原文链接:https://www.f2er.com/ruby/271101.html

猜你在找的Ruby相关文章