$ scala-cli run Shop.scala 2026.09.15 10:06:24:376 main INFO shop.Shop.main:15 Store open on port 8080 2026.09.15 10:06:24:575 main INFO shop.Shop.checkout:10 Checking out A-1042 for $86.50 Checking out A-1043 for $1249.00 2026.09.15 10:06:24:594 main WARN shop.Shop.checkout:11 Large order A-1043 held for review $
Scribe
Fast Scala logging, with nothing to configure.
Open source
A logging library built from scratch in Scala for speed, instead of wrapping a Java logger. Add one dependency and call scribe.info: no configuration files, no logger setup, and the class, method, and line number of every message included for free.
One line to start
libraryDependencies += "com.outr" %% "scribe" % "<version>"
scribe.info("Yes, it's that simple!")
There is no configuration file to write, no logger to create, and nothing to mix into your classes. The class, method, and line number of each message are worked out when your code compiles, so every log line carries them at no cost at runtime. Java loggers have to walk the stack to find the same information, which is why they usually leave it switched off.
Configured in code
Configuration is ordinary Scala, so it can come from any configuration library, or change while a server is running. Turn on debug logging for one package to chase a production problem, then turn it back off, without a restart.
import scribe.Level
import scribe.file.*
val logFile = "logs" / ("app-" % year % "-" % month % "-" % day % ".log")
scribe.Logger.root
.clearHandlers()
.withHandler(minimumLevel = Some(Level.Info))
.withHandler(writer = FileWriter(logFile), minimumLevel = Some(Level.Warn))
.replace()
scribe.Logger("shop.payments").withMinimumLevel(Level.Debug).replace()
Everywhere Scala runs
Scribe runs on the JVM, Scala.js, and Scala Native, and is published for Scala 2.12, 2.13, and 3.
Built for speed
Performance was the point from the start. Positions are resolved at compile time, and asynchronous logging takes the remaining cost off your application's threads entirely. The 2018 benchmarks, written up below, compared it with Log4j 2 and Scala Logging on file logging.
Works with what you already use
- SLF4J 1 and 2, Log4j, and Java Platform Logging bridges send the logging from Java libraries through Scribe.
- Rolling log files by date or size, with paths built in code.
- JSON output with fabric or circe, and Logstash for log pipelines.
- Slack notifications for the messages that need a person.
- Cats Effect integration.
Scribe has been in development since 2016. It is MIT licensed, and the latest version is listed on GitHub. It is the logger behind LightDB, Sigil, NaboTV, Voidcraft, and the site you are reading.