5.2 KiB
See below for config by topic-
Filtering
A signal will be provided to a handler iff ALL of the following are true:
-
- Signal creation is allowed by signal filters:
- a. Compile time: sample rate, kind, ns, id, level, when form, rate limit
- b. Runtime: sample rate, kind, ns, id, level, when form, rate limit
-
- Signal handling is allowed by handler filters:
- a. Compile time: not applicable
- b. Runtime: sample rate, kind, ns, id, level, when fn, rate limit
-
- Signal middleware
(fn [signal]) => ?modified-signaldoes not return nil
- Signal middleware
-
- Handler middleware
(fn [signal]) => ?modified-signaldoes not return nil
- Handler middleware
See help:filters for more about filtering.
Signal handlers
See section 4-Handlers.
Interop
tools.logging
tools.logging can use Telemere as its logging implementation (backend).
To do this:
- Ensure that you have the
tools.loggingdependency, and - Call
tools-logging->telemere!, or set the relevant environmental config as described in its docstring.
Verify successful intake with check-intakes:
(check-intakes) ; =>
{:tools-logging {:sending->telemere? true, :telemere-receiving? true}}
Java logging
SLF4J can use Telemere as its logging backend.
To do this, ensure that you have the following dependencies:
[org.slf4j/slf4j-api "x.y.z"] ; >= 2.0.0 only!
[com.taoensso/slf4j-telemere "x.y.z"]
Telemere needs SLF4J API version 2 or newer. If you're seeing
Failed to load class "org.slf4j.impl.StaticLoggerBinder"it could be that your project is importing the older v1 API, check withlein deps :treeor equivalent.
When com.taoensso/slf4j-telemere is on your classpath AND no other SLF4J backends are, SLF4J will direct all its logging calls to Telemere.
Verify successful intake with check-intakes:
(check-intakes) ; =>
{:slf4j {:sending->telemere? true, :telemere-receiving? true}}
For other (non-SLF4J) logging like Log4j, java.util.logging (JUL), and Apache Commons Logging (JCL), use an appropriate SLF4J bridge and the normal SLF4J config as above.
In this case logging will be forwarded:
- From Log4j/JUL/JCL/etc. to SLF4J, and
- From SLF4J to Telemere
System streams
The JVM's System/out and/or System/err streams can be set to flush to Telemere signals.
To do this, call streams->telemere!.
Note that Clojure's *out*, *err* are not necessarily automatically affected.
Verify successful intake with check-intakes:
(check-intakes) ; =>
{:system/out {:sending->telemere? true, :telemere-receiving? true}
:system/err {:sending->telemere? true, :telemere-receiving? true}}
OpenTelemetry
Telemere can send signals as LogRecords to OpenTelemetry.
To do this:
- Ensure that you have the OpenTelemetry Java dependency.
- Use
handler:open-telemetry-loggerto create an appropriately configured handler, and register it withadd-handler!.
Tufte
Tufte is a simple performance monitoring library for Clojure/Script by the author of Telemere.
Telemere can easily incorporate Tufte performance data in its signals, just like any other data:
(let [[_ perf-data] (tufte/profiled <opts> <form>)]
(t/log! "Performance data" {:perf-data perf-data}))
Telemere and Tufte work great together:
- Their functionality is complementary.
- The upcoming Tufte v4 will share the same core as Telemere and offer an identical API for managing filters and handlers.
Truss
Truss is an assertions micro-library for Clojure/Script by the author of Telemere.
Telemere can easily incorporate Truss assertion failure information in its signals, just like any other (error) data.
The catch->error! signal creator can be particularly convenient for this:
(t/catch->error! <form-with-truss-assertion/s>)