web-dev-qa-db-ja.com

Ruby on Rails-ログメッセージをカラーで印刷する方法

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)
19
Freedom_Ben

基本的には、通常のRubyプログラムの場合と同じように、色のANSIエスケープシーケンスをデバッグ文字列に埋め込むことです。これを行うには、いくつかの方法があります。

  1. Rainbow gemを使用すると、次のことが可能になります。

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

    またはrequireミックスインを使用して、メソッドを文字列クラスに直接追加します。

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

    Rainbow gemは、開始エスケープシーケンスと終了エスケープシーケンスを文字列に自動的に追加します。

  2. colorize gemを使用します。これは、StringクラスへのRainbowミックスインと同じことを行います。

    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クラスに独自の拡張機能を記述します。例については、 この回答 または この回答 を参照してください。

その他のアイデアについては、 Colorized Ruby output

34
Freedom_Ben

Rails 5 なので、ActiveSupport::LogSubscriberを介してSQLログの色付けに内部サポートを使用することができます。

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