From b81119c40b4f2a18de689d693dd69ae5ef39ec10 Mon Sep 17 00:00:00 2001 From: Naftoli Gugenheim <98384+nafg@users.noreply.github.com> Date: Tue, 15 Aug 2023 00:04:29 -0400 Subject: [PATCH] Add and apply .scalafmt.conf --- .scalafmt.conf | 11 +++ .../appender/CloudJsonLoggingAppender.scala | 73 +++++++++---------- .../CloudJsonLoggingAppenderTests.scala | 46 ++++++------ build.sbt | 7 +- ci.sbt | 40 +++++----- .../nafg/cloudlogging/marker/JsonMarker.scala | 6 +- project/plugins.sbt | 4 +- 7 files changed, 94 insertions(+), 93 deletions(-) create mode 100644 .scalafmt.conf diff --git a/.scalafmt.conf b/.scalafmt.conf new file mode 100644 index 0000000..db36bbc --- /dev/null +++ b/.scalafmt.conf @@ -0,0 +1,11 @@ +version = "3.7.1" + +runner.dialect = scala213source3 + +maxColumn = 120 +preset = IntelliJ + +align { + preset = most + allowOverflow = false +} diff --git a/appender/src/main/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppender.scala b/appender/src/main/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppender.scala index e68411d..70185d7 100644 --- a/appender/src/main/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppender.scala +++ b/appender/src/main/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppender.scala @@ -18,7 +18,6 @@ import com.google.cloud.logging.{Option => _, _} import io.circe.{Json, JsonNumber, JsonObject} import org.slf4j.Marker - object CloudJsonLoggingAppender { private def severityFor(level: Level) = level match { @@ -32,53 +31,52 @@ object CloudJsonLoggingAppender { private def someMap[A, B](entries: (A, Option[B])*): Map[A, B] = entries.collect { case (k, Some(v)) => (k, v) }.toMap - private def stack(nullOrThrowProxy: IThrowableProxy, - refs: mutable.Set[IThrowableProxy]): Option[util.Map[String, AnyRef]] = + private def stack( + nullOrThrowProxy: IThrowableProxy, + refs: mutable.Set[IThrowableProxy] + ): Option[util.Map[String, AnyRef]] = Option(nullOrThrowProxy).map { throwProxy => if (refs.contains(throwProxy)) someMap("circularRef" -> Some(throwProxy.toString: AnyRef)).asJava else { refs += throwProxy someMap( - "className" -> Some(throwProxy.getClassName), - "message" -> Some(throwProxy.getMessage), - "stack" -> Option(throwProxy.getStackTraceElementProxyArray) + "className" -> Some(throwProxy.getClassName), + "message" -> Some(throwProxy.getMessage), + "stack" -> Option(throwProxy.getStackTraceElementProxyArray) .map(_.map(_.getStackTraceElement.toString)), "suppressed" -> Some(throwProxy.getSuppressed.map(stack(_, refs))) .filter(_.nonEmpty), - "cause" -> stack(throwProxy.getCause, refs) + "cause" -> stack(throwProxy.getCause, refs) ).asJava } } private object JsonToRaw extends Json.Folder[Any] { - override def onNull: Null = null - override def onBoolean(value: Boolean): Boolean = value - override def onNumber(value: JsonNumber): Double = value.toDouble - override def onString(value: String): String = value + override def onNull: Null = null + override def onBoolean(value: Boolean) : Boolean = value + override def onNumber(value: JsonNumber) : Double = value.toDouble + override def onString(value: String) : String = value override def onArray(value: Vector[Json]): util.List[Any] = value.map(_.foldWith[Any](JsonToRaw)).asJava - override def onObject(value: JsonObject): util.Map[String, Any] = + override def onObject(value: JsonObject) : util.Map[String, Any] = value.toMap.map { case (k, v) => (k, v.foldWith[Any](JsonToRaw)) }.asJava } def marker: Marker => Any = { - case JsonMarker(_name, data, references@_*) => + case JsonMarker(_name, data, references @ _*) => Map( - "name" -> _name, - "data" -> data.foldWith[Any](JsonToRaw), + "name" -> _name, + "data" -> data.foldWith[Any](JsonToRaw), "references" -> references.map(marker).toArray ).asJava - case m if m.hasReferences => - Map( - "name" -> m.getName, - "references" -> m.iterator.asScala.map(marker).toArray - ).asJava - case m => + case m if m.hasReferences => + Map("name" -> m.getName, "references" -> m.iterator.asScala.map(marker).toArray).asJava + case m => m.getName } - private val legalNameChars = + private val legalNameChars = ('a' to 'z').toSet ++ ('A' to 'Z') ++ ('0' to '9') ++ Set('/', '_', '-', '.') private def legalizeNameChar(c: Char) = if (legalNameChars(c)) c else '-' @@ -103,14 +101,14 @@ object CloudJsonLoggingAppender { new util.IdentityHashMap[IThrowableProxy, Throwable].asScala def toThrowable(proxy: IThrowableProxy): Throwable = - refs.getOrElseUpdate(proxy, { - val res = - new Throwable(proxy.getMessage, toThrowable(proxy.getCause)) - proxy.getSuppressed.foreach( - s => res.addSuppressed(toThrowable(s)) - ) - res - }) + refs.getOrElseUpdate( + proxy, { + val res = + new Throwable(proxy.getMessage, toThrowable(proxy.getCause)) + proxy.getSuppressed.foreach(s => res.addSuppressed(toThrowable(s))) + res + } + ) render(toThrowable(iThrowableProxy)) } @@ -118,8 +116,8 @@ object CloudJsonLoggingAppender { val payload = someMap( - "message" -> Some(message), - "marker" -> Option(e.getMarker).map(marker), + "message" -> Some(message), + "marker" -> Option(e.getMarker).map(marker), "throwable" -> stack( e.getThrowableProxy, Collections @@ -127,9 +125,9 @@ object CloudJsonLoggingAppender { .asScala ) ) - val labels = + val labels = Map( - "levelName" -> level.toString, + "levelName" -> level.toString, "levelValue" -> String.valueOf(level.toInt), "threadName" -> e.getThreadName ) ++ @@ -147,11 +145,8 @@ object CloudJsonLoggingAppender { } class CloudJsonLoggingAppender extends LoggingAppender { - private lazy val logging = LoggingOptions.getDefaultInstance.getService - private lazy val resource = MonitoredResourceUtil.getResource( - LoggingOptions.getDefaultInstance.getProjectId, - null - ) + private lazy val logging = LoggingOptions.getDefaultInstance.getService + private lazy val resource = MonitoredResourceUtil.getResource(LoggingOptions.getDefaultInstance.getProjectId, null) private lazy val defaultWriteOptions = Seq(WriteOption.logName("java.log"), WriteOption.resource(resource)) diff --git a/appender/src/test/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppenderTests.scala b/appender/src/test/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppenderTests.scala index cd0b124..80a0b2d 100644 --- a/appender/src/test/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppenderTests.scala +++ b/appender/src/test/scala/io/github/nafg/cloudlogging/appender/CloudJsonLoggingAppenderTests.scala @@ -14,29 +14,28 @@ import org.scalatest.Inside._ import org.scalatest.funsuite.AnyFunSuite import org.slf4j.Marker - class CloudJsonLoggingAppenderTests extends AnyFunSuite { test("Exception") { val loggingEvent: ILoggingEvent = new ILoggingEvent { - override val getThreadName: String = Thread.currentThread().getName - override def getLevel: Level = Level.ERROR - override def getMessage: String = "This is a test message" - override def getArgumentArray: Array[AnyRef] = Array.empty - override def getFormattedMessage: String = getMessage - override def getLoggerName: String = getClass.getName - override def getLoggerContextVO: LoggerContextVO = + override val getThreadName: String = Thread.currentThread().getName + override def getLevel: Level = Level.ERROR + override def getMessage: String = "This is a test message" + override def getArgumentArray: Array[AnyRef] = Array.empty + override def getFormattedMessage: String = getMessage + override def getLoggerName: String = getClass.getName + override def getLoggerContextVO: LoggerContextVO = new LoggerContextVO(new LoggerContext) - override def getThrowableProxy: IThrowableProxy = + override def getThrowableProxy: IThrowableProxy = new ThrowableProxy(new RuntimeException("Some error")) - override def getCallerData: Array[StackTraceElement] = Array.empty - override def hasCallerData: Boolean = false - override def getMarker: Marker = + override def getCallerData: Array[StackTraceElement] = Array.empty + override def hasCallerData: Boolean = false + override def getMarker: Marker = JsonMarker("testMarker", Json.obj("key" -> Json.fromString("value"))) override def getMDCPropertyMap: util.Map[String, String] = Map.empty[String, String].asJava - override def getMdc: util.Map[String, String] = getMDCPropertyMap - override val getTimeStamp: Long = System.currentTimeMillis() - override def prepareForDeferredProcessing(): Unit = () + override def getMdc: util.Map[String, String] = getMDCPropertyMap + override val getTimeStamp: Long = System.currentTimeMillis() + override def prepareForDeferredProcessing(): Unit = () } val logEntry = CloudJsonLoggingAppender.logEntryFor(loggingEvent) @@ -46,20 +45,17 @@ class CloudJsonLoggingAppenderTests extends AnyFunSuite { val data: util.Map[String, AnyRef] = logEntry.getPayload[Payload.JsonPayload].getDataAsMap - inside(data.get("message")) { - case message: String => - assert(message.startsWith(loggingEvent.getMessage)) + inside(data.get("message")) { case message: String => + assert(message.startsWith(loggingEvent.getMessage)) } - inside(data.get("marker")) { - case marker: util.Map[_, _] => - assert(marker.get("name") == "testMarker") + inside(data.get("marker")) { case marker: util.Map[_, _] => + assert(marker.get("name") == "testMarker") } - inside(data.get("throwable")) { - case throwable: util.Map[_, _] => - assert(throwable.get("message") == "Some error") - assert(throwable.containsKey("stack")) + inside(data.get("throwable")) { case throwable: util.Map[_, _] => + assert(throwable.get("message") == "Some error") + assert(throwable.containsKey("stack")) } } } diff --git a/build.sbt b/build.sbt index 6871acd..c6df995 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,7 @@ import _root_.io.github.nafg.mergify.dsl.* - ThisBuild / crossScalaVersions := Seq("2.13.11", "3.3.0") -ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.last +ThisBuild / scalaVersion := (ThisBuild / crossScalaVersions).value.last ThisBuild / organization := "io.github.nafg.cloudlogging" @@ -18,7 +17,7 @@ lazy val marker = .settings( noFatalWarnings, libraryDependencies += "io.circe" %% "circe-core" % "0.14.5", - libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.7" + libraryDependencies += "org.slf4j" % "slf4j-api" % "2.0.7" ) lazy val appender = @@ -27,7 +26,7 @@ lazy val appender = .settings( noFatalWarnings, libraryDependencies += "com.google.cloud" % "google-cloud-logging-logback" % "0.130.21-alpha", - libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.16" % Test + libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.16" % Test ) publish / skip := true diff --git a/ci.sbt b/ci.sbt index 11f8ee0..d5c4356 100644 --- a/ci.sbt +++ b/ci.sbt @@ -1,24 +1,26 @@ -inThisBuild(List( - homepage := Some(url("https://github.com/nafg/cloud-logging-logback-scala")), - licenses := List("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0")), - developers := List( - Developer("nafg", "Naftoli Gugenheim", "98384+nafg@users.noreply.github.com", url("https://github.com/nafg")) - ), - dynverGitDescribeOutput ~= (_.map(o => o.copy(dirtySuffix = sbtdynver.GitDirtySuffix("")))), - dynverSonatypeSnapshots := true, - githubWorkflowTargetTags ++= Seq("v*"), - githubWorkflowPublishTargetBranches := Seq(RefPredicate.StartsWith(Ref.Tag("v"))), - githubWorkflowPublish := Seq( - WorkflowStep.Sbt( - List("ci-release"), - env = Map( - "PGP_PASSPHRASE" -> "${{ secrets.PGP_PASSPHRASE }}", - "PGP_SECRET" -> "${{ secrets.PGP_SECRET }}", - "SONATYPE_PASSWORD" -> "${{ secrets.SONATYPE_PASSWORD }}", - "SONATYPE_USERNAME" -> "${{ secrets.SONATYPE_USERNAME }}" +inThisBuild( + List( + homepage := Some(url("https://github.com/nafg/cloud-logging-logback-scala")), + licenses := List("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0")), + developers := List( + Developer("nafg", "Naftoli Gugenheim", "98384+nafg@users.noreply.github.com", url("https://github.com/nafg")) + ), + dynverGitDescribeOutput ~= (_.map(o => o.copy(dirtySuffix = sbtdynver.GitDirtySuffix("")))), + dynverSonatypeSnapshots := true, + githubWorkflowTargetTags ++= Seq("v*"), + githubWorkflowPublishTargetBranches := Seq(RefPredicate.StartsWith(Ref.Tag("v"))), + githubWorkflowPublish := Seq( + WorkflowStep.Sbt( + List("ci-release"), + env = Map( + "PGP_PASSPHRASE" -> "${{ secrets.PGP_PASSPHRASE }}", + "PGP_SECRET" -> "${{ secrets.PGP_SECRET }}", + "SONATYPE_PASSWORD" -> "${{ secrets.SONATYPE_PASSWORD }}", + "SONATYPE_USERNAME" -> "${{ secrets.SONATYPE_USERNAME }}" + ) ) ) ) -)) +) sonatypeProfileName := "io.github.nafg" diff --git a/marker/src/main/scala/io/github/nafg/cloudlogging/marker/JsonMarker.scala b/marker/src/main/scala/io/github/nafg/cloudlogging/marker/JsonMarker.scala index 7ff7ecc..7310bef 100644 --- a/marker/src/main/scala/io/github/nafg/cloudlogging/marker/JsonMarker.scala +++ b/marker/src/main/scala/io/github/nafg/cloudlogging/marker/JsonMarker.scala @@ -3,10 +3,8 @@ package io.github.nafg.cloudlogging.marker import io.circe.{Encoder, Json} import org.slf4j.Marker -case class JsonMarker(name: String, data: Json, references: Marker*) - extends BasicMarker(name, references) +case class JsonMarker(name: String, data: Json, references: Marker*) extends BasicMarker(name, references) object JsonMarker { - def apply[A: Encoder](name: String, - references: Marker*)(data: A): JsonMarker = + def apply[A: Encoder](name: String, references: Marker*)(data: A): JsonMarker = JsonMarker(name, Encoder[A].apply(data), references: _*) } diff --git a/project/plugins.sbt b/project/plugins.sbt index ddd0681..37f5cca 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,3 +1,3 @@ -addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.0") -addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") +addSbtPlugin("org.typelevel" % "sbt-tpolecat" % "0.5.0") +addSbtPlugin("com.github.sbt" % "sbt-ci-release" % "1.5.12") addSbtPlugin("io.github.nafg.mergify" % "sbt-mergify-github-actions" % "0.7.0")