Ruby on Rails - 如何以彩色打印日志消息

时间:2014-08-29 19:21:55

标签: ruby-on-rails ruby logging colors console

我很惊讶我已经无法在SO上找到这个了。

我希望能够在我的日志输出中为控制台输入特定的字符串段。所以有点像这样:

"This part of the message in Green:  This part in Blue"

可能是这样写的:

Rails.logger.debug("This part of the message in Green:  ".green + "This part in Blue".blue)

2 个答案:

答案 0 :(得分:33)

基本上你要做的是将ANSI转义序列颜色嵌入到调试字符串中,就像在常规Ruby程序中一样。有几种方法可以解决这个问题:

  1. 使用rainbow gem,可以执行此操作:

    require 'rainbow' Rails.logger.debug(Rainbow("This message is Green").green)

    require mixin将方法直接添加到字符串类:

    require 'rainbow/ext/string' Rails.logger.debug("This is Green - ".green + "This is Blue".blue)

    Rainbow gem会自动将开始和结束转义序列添加到字符串中。

  2. 使用colorize gem,它与Rainbow mixin在String类中的作用相同:

    require 'colorize' Rails.logger.debug("This is Green - ".green + "This is Blue".blue)

  3. 使用以下内容将转义序列放入您自己:

    Rails.logger.debug("\033[32mThis message is Green\033[0m")

  4. 将自己的扩展名写入String类。有关示例,请参阅this answerthis answer

  5. 有关更多提示,请参阅Colorized Ruby output

答案 1 :(得分:4)

Rails 5起,可以通过ActiveSupport::LogSubscriber使用内部支持为sql日志着色:

logger.debug ActiveSupport::LogSubscriber.new.send(:color, "message", :red)