2014-08-29 7 views
11

Ich bin überrascht, dass ich dies auf SO schon nicht finden konnte.Ruby on Rails - So drucken Sie Protokollnachrichten in Farbe

Ich möchte in der Lage sein, bestimmte Segmente von Zeichenfolgen in meiner Protokollausgabe, die an die Konsole geht, einzufärben. So somethng wie folgt aus:

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

Möglicherweise wie folgt geschrieben:

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

Antwort

27

Im Grunde, was Sie tun möchten einzubetten ist ANSI-Escape-Sequenzen für die Farbe in Ihren Debug-Strings, wie würden Sie in einem regulären Rubin Programm. Es gibt mehrere Möglichkeiten, um dies zu:

  1. die rainbow gem verwenden, die Sie dies tun können:

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

    oder require die mixin Methoden der String-Klasse direkt hinzuzufügen:

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

    der Edelstein-Regenbogen wird der automatisch hinzufügen Anfang und Ende von Escape-Sequenzen in die Zeichenfolge.

  2. Verwenden Sie das colorize Juwel, das das gleiche wie der Regenbogen mixin auf der String-Klasse tut:

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

  3. Setzen Sie die Escape-Sequenzen in sich selbst, so etwas wie dies mit:

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

  4. Schreiben Sie Ihre eigene Erweiterung in die String-Klasse. Ein Beispiel finden Sie unter this answer oder this answer.

Weitere Ideen finden Colorized Ruby output

+1

Awesome! Vielen Dank! –

+0

Sehr schön! Vielen Dank! – Neil

+2

Verwende das 'ribbon'-Juwel,' colorize' verwendet eine inkompatible Lizenz. – Barry