【问题标题】:Ruby on Rails - How to print log messages in colorRuby on Rails - 如何以彩色打印日志消息
【发布时间】:2014-10-23 20:33:48
【问题描述】:

我很惊讶我还没能在 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)

【问题讨论】:

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


    【解决方案1】:

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

    1. 使用rainbow gem,它允许你这样做:

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

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

      2021 年 3 月更新:Rainbow Gem API 已更改。立即使用:

      require 'rainbow/refinement' using Rainbow Rails.logger.debug("This is Green - ".green + "This is Blue".blue)

      以前的版本(供后代使用):

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

      结束更新

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

    2. 使用colorize gem,它与 String 类的 Rainbow mixin 做同样的事情:

      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

    更多想法,见How can I use Ruby to colorize the text output to a terminal?

    【讨论】:

    • 使用rainbow gem,colorize 使用非常不兼容的许可证。
    • rainbow gem 在我的情况下不起作用,但 colorize 工作得很好。我从全局帮助器中的自定义类调用Rails.logger
    • 我向任何想了解更多关于如何在输出中生成颜色而不安装新宝石的人推荐此链接。 misc.flogisoft.com/bash/tip_colors_and_formatting
    【解决方案2】:

    由于Rails 5,可以通过ActiveSupport::LogSubscriber使用内部对sql日志着色的支持:

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

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      相关资源
      最近更新 更多