-
-
Notifications
You must be signed in to change notification settings - Fork 5
3 Config
See below for config by topic-
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-signal
does not return nil
-
Signal middleware
-
-
Handler middleware
(fn [signal]) => ?modified-signal
does not return nil
-
Handler middleware
See help:filters
for more about filtering.
See section 4-Handlers.
tools.logging
can use Telemere as its logging implementation (backend).
To do this:
- Ensure that you have the
tools.logging
dependency, 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}}
SLF4Jv2
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 :tree
or 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
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 is a popular open-source observability framework that provides tools for collecting, processing, and exporting telemetry data like traces, metrics, and logs from software systems.
Telemere can send signals as LogRecords
with correlated tracing data to configured OpenTelemetry Java exporters.
This allows output to go (via configured exporters) to a wide variety of targets like Jaeger, Zipkin, AWS X-Ray, AWS CloudWatch, etc.
To do this:
- Ensure that you have the OpenTelemetry Java dependency.
- Ensure that the relevant exporters are appropriately configured (this is the trickiest part, but not at all specific to Telemere).
- Create a Telemere signal handler using
handler:open-telemetry-logger
, and register it usingadd-handler!
.
Aside from configuring the exporters (2), Telemere's OpenTelemetry interop does not require any use of or familiarity with the OpenTelemetry Java API or concepts. Just use Telemere as you normally would, and the handler (3) will automatically emit detailed log and trace data to your configured exporters (2).
OpenTelemetry interop is experimental - I'm looking for feedback on this feature please! 🙏
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 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>)