devlog
is the name of a set of logging libraries that I've built for different programming
languages. They all focus on developer-friendly structured logging, but they differ in their scope:
The Go implementation was the first version of devlog
. After working with Go in multiple
projects (casus-belli
, analysis
, coffeetalk
,
Ignite), one of the things I missed was a nicer human-readable log output format. So when
Go added structured logging to its standard library, I took the opportunity to write my own log
handler! With help from an
amazing guide
written by one of the Go maintainers, I built a structured log handler with an output format
designed for readability in local development. I now use this in all my Go projects where I need
logging.
Later, I started writing some Rust (see gadd
), and there too I found myself missing nicer
log output formats. So I decided to write my own log subscriber for tracing
, one of the most
popular logging libraries for Rust, to use the same output format as my Go library. And so,
devlog-tracing
was born.
Finally, after starting my job at Liflig, I started writing Kotlin for the backend. I
found myself unhappy with the logging library we were using at the time, and so I decided to write
yet another version of devlog
. My aim with the library is to provide an ergonomic logging API
that makes it as easy as possible to attach structured data to logs, while keeping the abstractions
near-zero-cost at runtime. The implementation wraps the standard Java logging libraries SLF4J and
Logback, so that it can interoperate with logs from other libraries. We now use this library in
many of our backend services at Liflig, and I'm quite happy with it! It's quite satisfying to make a
library that directly addresses frustrations you've been having.
hermannm/devlog-kotlin
klibs.io/project/hermannm/devlog-kotlin
hermannm/devlog
hermannm/devlog-tracing
docs.rs/devlog-tracing
crates.io/crates/devlog-tracing