Skip to content

Commit 940a441

Browse files
committed
[doc] Update README
1 parent 4231465 commit 940a441

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

README.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010

1111
### Modern logging facade for Clojure/Script
1212

13-
Trove is a minimal, modern alternative to [tools.logging](https://github.com/clojure/tools.logging) that supports:
13+
Trove is a minimal, modern alternative to [tools.logging](https://github.com/clojure/tools.logging).
14+
15+
It's intended for **library authors** that want to emit rich logging _without_ forcing their users to adopt any particular backend.
16+
17+
It supports:
1418

1519
- Both traditional **and structured** logging
1620
- Both Clojure **and ClojureScript**
@@ -20,7 +24,7 @@ It's TINY (1 macro, 0 deps, ~100 loc), fast, and highly flexible.
2024

2125
It supports any backend including: [Telemere](https://www.taoensso.com/telemere), [Timbre](https://www.taoensso.com/timbre), [μ/log](https://github.com/BrunoBonacci/mulog), [tools.logging](https://github.com/clojure/tools.logging), [SLF4J](https://www.slf4j.org/), etc.
2226

23-
It works great for **library authors** that want to emit rich logging _without_ forcing their users to adopt any particular backend.
27+
Trove and Telemere offer an identical API and were designed in concert.
2428

2529
## To log
2630

@@ -74,6 +78,17 @@ That's why Trove automatically delays any values that need runtime evaluation, a
7478

7579
This explains the `:lazy_` `{:keys [msg data error kvs]}` arg given to [`truss/*log-fn*`](https://cljdoc.org/d/com.taoensso/trove/CURRENT/api/taoensso.trove#*log-fn*).
7680

81+
## Why structured logging?
82+
83+
The key difference between traditional and structured logging?
84+
85+
- Traditional logging outputs **strings** (messages).
86+
- Structured logging in contrast outputs **data**. It retains **rich data types and (nested) structures** throughout the logging pipeline from logging callsite → filters → middleware → handlers.
87+
88+
A data-oriented pipeline can make a huge difference - supporting **easier analytics**, **transformation**, **filtering**, etc. It’s also usually **faster**, since you only pay for serialization if/when you need it. In a lot of cases you can avoid serialization altogether if your final target (DB, etc.) supports the relevant types.
89+
90+
The structured (data-oriented) approach is inherently more flexible, faster, and well suited to the tools and idioms offered by Clojure and ClojureScript.
91+
7792
## Funding
7893

7994
You can [help support][sponsor] continued work on this project and [others][my work], thank you!! 🙏

0 commit comments

Comments
 (0)