Structured logs and telemetry for Clojure/Script
Find a file
2024-04-10 18:40:33 +02:00
.github/workflows [new] Add Clojure v1.12, JVM v21 to tests 2024-03-11 11:36:26 +01:00
bb [new] Add initial code, content 2024-03-08 10:35:10 +01:00
doc [new] Add initial code, content 2024-03-08 10:35:10 +01:00
public [new] Add basic shadow-cljs setup 2024-03-28 16:24:08 +01:00
resources/signal-docstrings [new] Extend trace!, spy! for easier catching 2024-04-05 17:51:14 +02:00
slf4j v1.0.0-alpha3 (2024-04-05) 2024-04-05 18:24:11 +02:00
src/taoensso [nop] Misc housekeeping 2024-04-10 18:40:33 +02:00
test/taoensso [nop] Misc housekeeping 2024-04-10 18:40:33 +02:00
wiki [new] Add initial code, content 2024-03-08 10:35:10 +01:00
.gitignore [new] Add archiving file handler 2024-04-05 17:51:14 +02:00
bb.edn [new] Add initial code, content 2024-03-08 10:35:10 +01:00
CHANGELOG.md [new] Add initial code, content 2024-03-08 10:35:10 +01:00
examples.cljc [nop] Misc housekeeping 2024-03-14 10:23:23 +01:00
FUNDING.yml [new] Add initial code, content 2024-03-08 10:35:10 +01:00
LICENSE.txt [nop] Add initial LICENSE.txt 2023-08-28 12:13:21 +02:00
project.clj [nop] Bump deps 2024-04-10 18:40:33 +02:00
README.md [nop] Switch to faster enc/binding 2024-03-28 16:24:08 +01:00
sampling.svg [new] Update diagrams 2024-03-11 11:36:26 +01:00
SECURITY.md [new] Add initial code, content 2024-03-08 10:35:10 +01:00
shadow-cljs.edn [nop] Bump deps 2024-04-05 15:24:42 +02:00
shadow-cljs.sh [new] Add basic shadow-cljs setup 2024-03-28 16:24:08 +01:00
signal-flowchart.svg [new] Update diagrams 2024-03-11 11:36:26 +01:00
telemere.fig [new] Update diagrams 2024-03-11 11:36:26 +01:00

Taoensso open source
Documentation | Latest releases | Get support

Telemere

Structured telemetry library for Clojure/Script

This library is still under development!!

Telemere is an upcoming next-generation observability toolkit for capturing all kinds of un/structured information in your running Clojure and ClojureScript programs.

It offers a simple, clean, unified API that covers: logging, events, performance measurement, tracing, etc.

Taking full advantage of Clojure's unique macro and interop capabilities, Telemere represents the refinement and culmination of ideas brewing for 10+ years in Timbre, Tufte, Truss, etc.

Latest release/s

Main tests Graal tests

See here for earlier releases.

Why Telemere?

  • Simple, lightweight API that's easy to use, easy to configure, and deeply flexible.
  • An unmatched logging experience designed to scale comfortably from the smallest disposable code, to the most massive production applications.
  • Easy integration with the tooling of your choice, including first-class out-the-box interop with OpenTelemetry, SLF4J v2, clojure.tools.logging, and Tufte.
  • Hyper-optimized and blazing fast, see performance.
  • Expressive per-call and per-handler filtering at both runtime and compile-time.
  • Easily filter by namespace and id pattern, level, level by namespace pattern, etc.
  • Support for auto sampling, rate-limiting, and back-pressure monitoring.
  • Support for fully configurable a/sync dispatch (blocking, dropping, sliding, etc.).
  • Sensible defaults to make getting started fast and easy.
  • Extensive beginner-oriented documentation, docstrings, examples, etc.

Video demo

See for intro and usage: (TODO: coming later)

Telemere demo video

Quick example

;; TODO: coming later

Observability tips

See here for general advice re: building and maintaining highly observable Clojure/Script systems.

Performance

Telemere is highly optimized and offers terrific performance at any scale:

Compile-time filtering? Runtime filtering? Time? Trace? nsecs
✓ (elide) - - - 0
- - - 200
- - 280
- 650

Measurements:

  • Are ~nanoseconds per signal call (= milliseconds per 1e6 calls)
  • Exclude handler runtime (which depends on handler/s, is usually async)
  • Taken on a 2020 Macbook Pro M1, running OpenJDK 21

Tip: Telemere offers extensive per-call and per-handler filtering, sampling, and rate-limiting. Use these to ensure that you're not capturing useless/low-value information in production. See here for more tips!

Documentation

  • Wiki (getting started, usage, etc.) (TODO: coming later)
  • API reference: Codox, clj-doc

Funding

You can help support continued work on this project, thank you!! 🙏

License

Copyright © 2023-2024 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).