Modules
Published for Scala 3 under now.sendline:
"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:
object instances extends LogbackInstances with CatsInstances with CirceInstances