SENDLINE open source

Modules

Published for Scala 3 under now.sendline:

scala
"now.sendline" %% "logging4s-<module>" % "7.0.0"
Module Min. Scala Notes
core logging4s-core 3.9 LTS type classes + Logging; no backend dependency
backend logging4s-logback 3.9 LTS slf4j + logback + logstash-encoder; real nested JSON
logging4s-log4j2 3.9 LTS Log4j2 API; values as a MapMessage
logging4s-slf4j 3.9 LTS bare slf4j-api 2.x addKeyValue; bring your own binding
logging4s-console 3.9 LTS standalone JSON/plain to stdout/stderr; HOCON-configured; no logging framework needed
runtime logging4s-cats 3.9 LTS cats-effect 3; plain via cats.Show; context via IOLocal
logging4s-zio 3.9 LTS zio.Task and zio.UIO; plain via zio.prelude.Debug; context via FiberRef
logging4s-kyo 3.9 LTS kyo.Sync; plain via kyo.Render; context via kyo.Local
logging4s-rapid 3.9 LTS rapid.Task
json logging4s-circe 3.9 LTS io.circe.Encoder
logging4s-jsoniter 3.9 LTS jsoniter-scala JsonValueCodec
logging4s-zio-json 3.9 LTS zio-json JsonEncoder
logging4s-play-json 3.9 LTS play-json Writes
logging4s-spray-json 3.9 LTS spray-json JsonWriter
logging4s-json4s 3.9 LTS json4s Formats; encodes any type by reflection, so one it cannot open (a JDK type such as Instant) fails when rendered, not when compiled
logging4s-argonaut 3.9 LTS argonaut EncodeJson
logging4s-borer 3.9 LTS borer Encoder
logging4s-upickle 3.9 LTS upickle Writer
logging4s-weepickle 3.9 LTS weepickle From
logging4s-fabric 3.9 LTS fabric Json

Compatibility

Every module is built on the 3.9 LTS release. Scala 3 TASTy is backward but not forward compatible, so no release from 4.0 on can be consumed from a 3.3 LTS project — 3.0.x is the line to stay on until your application moves to 3.9. In exchange, the split that 3.x had is gone: logging4s-kyo and logging4s-rapid used to be pinned to a newer Scala than everything else, and now sit on the same release as core.

Every artifact is compiled with -release 17, so it runs on JDK 17 or later and the compiler checks each call against the JDK 17 API rather than whichever JDK built it. logging4s-kyo is the exception, below.

Within a major version, binary compatibility is checked by MiMa on every build, and versionScheme := "semver-spec" describes what the artifacts promise.

7.0.0 moves logging4s to the now.sendline organization and changes nothing else: the code is 6.1.0's, the package is still logging4s, and MiMa checks every module against org.logging4s 6.0.0 and 6.1.0. Swapping the organization in build.sbt is the whole upgrade — see From 6.1 to 7.0. org.logging4s 7.0.0 is published as a relocation, so a build that only bumps the version is moved to now.sendline by Maven and by sbt. The repository is sendline-now/logging4s, and the site is oss.sendline.now/logging4s.

logging4s-kyo depends on a kyo release candidate (1.0.0-RC7). Until kyo reaches 1.0.0 final, that module sits outside the binary-compatibility promise the other artifacts make. Compiling it also needs JDK 25 — kyo's Frame macro runs inside the compiler and its class files target Java 25, so this is a compile-time requirement, not just a runtime one.

Each integration module exposes its givens as a named trait plus a companion object, so you can also mix several into one import for your app:

scala
object instances extends LogbackInstances with CatsInstances with CirceInstances
built from README.md at v7.0.0 edit this page on GitHub