From 66f345a3030bedcc0e4077f10dd3a013984d4211 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 3 Apr 2017 03:20:36 -0400 Subject: [PATCH 1/5] Cross publish utilCollection Fixes sbt/util#72 --- build.sbt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index a7ce52220..a2f98a67c 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,7 @@ import Dependencies._ import Util._ import com.typesafe.tools.mima.core._, ProblemFilters._ -def baseVersion: String = "1.0.0-M19" +def baseVersion: String = "1.0.0-M21" def internalPath = file("internal") def commonSettings: Seq[Setting[_]] = Seq( @@ -73,6 +73,7 @@ lazy val utilControl = (project in internalPath / "util-control"). lazy val utilCollection = (project in internalPath / "util-collection"). dependsOn(utilTesting % Test). settings( + crossScalaVersions := Seq(scala210, scala211, scala212), commonSettings, Util.keywordsSettings, name := "Util Collection", From 94a2e6cb1274537d4df4fc085f9f8e86d0357329 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 3 Apr 2017 03:21:14 -0400 Subject: [PATCH 2/5] Fix directory name --- .../sbt/internal/util/{codecs => codec}/PositionFormats.scala | 0 .../sbt/internal/util/{codecs => codec}/ProblemFormats.scala | 0 .../sbt/internal/util/{codecs => codec}/SeverityFormats.scala | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename internal/util-logging/src/main/scala/sbt/internal/util/{codecs => codec}/PositionFormats.scala (100%) rename internal/util-logging/src/main/scala/sbt/internal/util/{codecs => codec}/ProblemFormats.scala (100%) rename internal/util-logging/src/main/scala/sbt/internal/util/{codecs => codec}/SeverityFormats.scala (100%) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala similarity index 100% rename from internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala rename to internal/util-logging/src/main/scala/sbt/internal/util/codec/PositionFormats.scala diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala similarity index 100% rename from internal/util-logging/src/main/scala/sbt/internal/util/codecs/ProblemFormats.scala rename to internal/util-logging/src/main/scala/sbt/internal/util/codec/ProblemFormats.scala diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala similarity index 100% rename from internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala rename to internal/util-logging/src/main/scala/sbt/internal/util/codec/SeverityFormats.scala From e21c78ebb0d6733711e62e885856d5e60c171c51 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 3 Apr 2017 03:22:04 -0400 Subject: [PATCH 3/5] Move JValue format here --- .../internal/util/codec/JValueFormats.scala | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala new file mode 100644 index 000000000..2ff681825 --- /dev/null +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codec/JValueFormats.scala @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 Lightbend Inc. + */ + +package sbt +package internal +package util.codec + +import sjsonnew.{ JsonWriter => JW, JsonReader => JR, JsonFormat => JF, _ } +import scala.json.ast.unsafe._ + +trait JValueFormats { self: sjsonnew.BasicJsonProtocol => + implicit val JNullFormat: JF[JNull.type] = new JF[JNull.type] { + def write[J](x: JNull.type, b: Builder[J]) = b.writeNull() + def read[J](j: Option[J], u: Unbuilder[J]) = JNull + } + + implicit val JBooleanFormat: JF[JBoolean] = project(_.get, (x: Boolean) => JBoolean(x)) + implicit val JStringFormat: JF[JString] = project(_.value, (x: String) => JString(x)) + implicit val JNumberFormat: JF[JNumber] = project(x => BigDecimal(x.value), (x: BigDecimal) => JNumber(x.toString)) + implicit val JArrayFormat: JF[JArray] = project[JArray, Array[JValue]](_.value, JArray(_)) + + implicit lazy val JObjectJsonWriter: JW[JObject] = new JW[JObject] { + def write[J](x: JObject, b: Builder[J]) = { + b.beginObject() + x.value foreach (jsonField => JValueFormat.addField(jsonField.field, jsonField.value, b)) + b.endObject() + } + } + + implicit lazy val JValueJsonWriter: JW[JValue] = new JW[JValue] { + def write[J](x: JValue, b: Builder[J]) = x match { + case x: JNull.type => JNullFormat.write(x, b) + case x: JBoolean => JBooleanFormat.write(x, b) + case x: JString => JStringFormat.write(x, b) + case x: JNumber => JNumberFormat.write(x, b) + case x: JArray => JArrayFormat.write(x, b) + case x: JObject => JObjectJsonWriter.write(x, b) + } + } + + implicit lazy val JValueJsonReader: JR[JValue] = new JR[JValue] { + def read[J](j: Option[J], u: Unbuilder[J]) = ??? // Is this even possible? with no Manifest[J]? + } + + implicit lazy val JValueFormat: JF[JValue] = jsonFormat[JValue](JValueJsonReader, JValueJsonWriter) +} From 1dab826ffd845f3f8390ab009e8c329f7e130b46 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 3 Apr 2017 03:22:33 -0400 Subject: [PATCH 4/5] Store JValue into ObjectEvent --- .../sbt/internal/util/ConsoleAppender.scala | 4 ++-- .../scala/sbt/internal/util/ManagedLogger.scala | 2 +- .../scala/sbt/internal/util/ObjectEvent.scala | 17 ++++++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala index 98f404d34..39d75cfce 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ConsoleAppender.scala @@ -263,8 +263,8 @@ class ConsoleAppender private[ConsoleAppender] ( } def objectEventToLines(oe: ObjectEvent[_]): Vector[String] = { - val tag = oe.tag - LogExchange.stringCodec[AnyRef](tag) match { + val contentType = oe.contentType + LogExchange.stringCodec[AnyRef](contentType) match { case Some(codec) => codec.showLines(oe.message.asInstanceOf[AnyRef]).toVector case _ => Vector(oe.message.toString) } diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala index a7b84990a..24b9a8e02 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ManagedLogger.scala @@ -42,7 +42,7 @@ class ManagedLogger( val tag = StringTypeTag[A] LogExchange.getOrElseUpdateJsonCodec(tag.key, implicitly[JsonFormat[A]]) // println("logEvent " + tag.key) - val entry: ObjectEvent[A] = new ObjectEvent(level, v, channelName, execId, tag.key) + val entry: ObjectEvent[A] = ObjectEvent(level, v, channelName, execId, tag.key) xlogger.log( ConsoleAppender.toXLevel(level), new ObjectMessage(entry) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala b/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala index 13cddfb83..fdf4d8789 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/ObjectEvent.scala @@ -4,12 +4,27 @@ package util import sbt.util.Level import sjsonnew.JsonFormat +import sjsonnew.support.scalajson.unsafe.Converter +import scala.json.ast.unsafe.JValue final class ObjectEvent[A]( val level: Level.Value, val message: A, val channelName: Option[String], val execId: Option[String], - val tag: String + val contentType: String, + val json: JValue ) extends Serializable { } + +object ObjectEvent { + def apply[A: JsonFormat]( + level: Level.Value, + message: A, + channelName: Option[String], + execId: Option[String], + contentType: String + ): ObjectEvent[A] = + new ObjectEvent(level, message, channelName, execId, contentType, + Converter.toJsonUnsafe(message)) +} From 069104b989bd403648380944f023a27925f8f75a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 3 Apr 2017 03:22:47 -0400 Subject: [PATCH 5/5] Bump up log4j2 to 2.8.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 20e317e57..f132800f9 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -41,7 +41,7 @@ object Dependencies { val sjsonnew = "com.eed3si9n" %% "sjson-new-core" % sjsonnewVersion val sjsonnewScalaJson = "com.eed3si9n" %% "sjson-new-scalajson" % sjsonnewVersion - def log4jVersion = "2.7" + def log4jVersion = "2.8.1" val log4jApi = "org.apache.logging.log4j" % "log4j-api" % log4jVersion val log4jCore = "org.apache.logging.log4j" % "log4j-core" % log4jVersion val log4jSlf4jImpl = "org.apache.logging.log4j" % "log4j-slf4j-impl" % log4jVersion