developer's diary

最近はc#のエントリが多いです

play framework2をjenkinsでコンパイルする場合。-Dsbt.log.noformat=trueのオプションをつける

問題

jenkinsでコンパイルする際ののログに以下のように色付きの文字がおかしくログに残る。

0m[[0minfo[0m] [0mLoading project definition from ....

jenkinsで単純に以下のコマンドを実行するようにしていると、色付きの文字がおかしくログに残ってしまいます。

~/play2.1.1/play clean update compile test

解決方法

オプションを追加

play -Dsbt.log.noformat=true clean update compile test

すると色付きでおかしかった文字が問題なく色なしでログに残ります。

[info] Loading project definition from ....

ソース探索

Play20 / framework / src / console / src / main / scala / Console.scalaの200行目あたりに今回の該当する部分がありました。

object Colors {

  import scala.Console._

  lazy val isANSISupported = {
    Option(System.getProperty("sbt.log.noformat")).map(_ != "true").orElse {
      Option(System.getProperty("os.name"))
        .map(_.toLowerCase)
        .filter(_.contains("windows"))
        .map(_ => false)
    }.getOrElse(true)
  }

  def red(str: String): String = if (isANSISupported) (RED + str + RESET) else str
  def blue(str: String): String = if (isANSISupported) (BLUE + str + RESET) else str
  def cyan(str: String): String = if (isANSISupported) (CYAN + str + RESET) else str
  def green(str: String): String = if (isANSISupported) (GREEN + str + RESET) else str
  def magenta(str: String): String = if (isANSISupported) (MAGENTA + str + RESET) else str
  def white(str: String): String = if (isANSISupported) (WHITE + str + RESET) else str
  def black(str: String): String = if (isANSISupported) (BLACK + str + RESET) else str
  def yellow(str: String): String = if (isANSISupported) (YELLOW + str + RESET) else str

}

色づけの条件(isANSISupported)に、

Option(System.getProperty("sbt.log.noformat")).map(_ != "true")

とあるので、-Dsbt.log.noformat=trueとしておくことで色づけされなくなります。