<<ahref="https://www.taoensso.com/telemere">https://www.taoensso.com/telemere</a>></pre></div><divclass="public anchor"id="var-*ctx*"><h3>*ctx*</h3><h4class="dynamic">dynamic</h4><h4class="lang"><ahref="taoensso.telemere.html#var-*ctx*">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Optional context (state) attached to all signals.
Value may be any type, but is usually nil or a map. Default (root) value is nil.
- Value may be (or may contain) an atom if you want mutable semantics.
- Value may be of form {<scope-id><data>} for custom scoping, etc.
- Use `get-env` to set default (root) value based on environmental config.</pre></div></div><divclass="public anchor"id="var-*middleware*"><h3>*middleware*</h3><h4class="dynamic">dynamic</h4><h4class="lang"><ahref="taoensso.telemere.html#var-*middleware*">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Optional (fn [signal]) => ?modified-signal to apply to all signals.
When middleware returns nil, skips all handlers. Default (root) value is nil.
Useful for dynamically transforming signals and/or filtering signals
- Use `get-env` to set default (root) value based on environmental config.</pre></div></div><divclass="public anchor"id="var-*uid-fn*"><h3>*uid-fn*</h3><h4class="dynamic">dynamic</h4><h4class="lang"><ahref="taoensso.telemere.html#var-*uid-fn*">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Experimental, subject to change.
See `help:handler-dispatch-options` for handler filters, etc.</pre></div></div><divclass="public anchor"id="var-catch-.3Eerror.21"><h3>catch->error!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-catch-.3Eerror.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(catch->error! form)</code><code>(catch->error! id form)</code><code>(catch->error! {:as opts, :keys [rethrow? catch-val elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error & kvs]} form)</code></div><divclass="doc"><preclass="plaintext">Unconditionally executes given form and-
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-chance"><h3>chance</h3><h4class="lang"><ahref="taoensso.telemere.html#var-chance">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(chance prob)</code></div><divclass="doc"><preclass="plaintext">Returns true with given probability ∈ ℝ[0,1].
- Returns a minimal signal (map) ready for printing, etc.
Signals are optimized for cheap creation and easy handling, so tend to be
verbose and may contain things like nil values and duplicated content.
This util efficiently cleans signals of such noise, helping reduce
storage/transmission size, and making key info easier to see.
Options:
`:incl-nils?` - Include signal's keys with nil values? (default false)
`:incl-kvs?` - Include signal's app-level root kvs? (default false)
`:incl-keys` - Subset of signal keys to retain from those otherwise
excluded by default: #{:location :kvs :file :host :thread}</pre></div></div><divclass="public anchor"id="var-comp-middleware"><h3>comp-middleware</h3><h4class="lang"><ahref="taoensso.telemere.html#var-comp-middleware">clj</a></h4><h4class="lang current">cljs</h4><h4class="added">added in Encore v3.106.0 (2024-05-01)</h4><divclass="usage"><code>(comp-middleware fs)</code><code>(comp-middleware f1 f2)</code><code>(comp-middleware f1 f2 f3)</code><code>(comp-middleware f1 f2 f3 & fs)</code></div><divclass="doc"><preclass="plaintext">Returns a single (composite) unary fn that applies all given unary fns
that indicates that it's an error.</pre></div></div><divclass="public anchor"id="var-event.21"><h3>event!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-event.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(event! id)</code><code>(event! id level)</code><code>(event! id {:as opts, :keys [elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error & kvs]})</code></div><divclass="doc"><preclass="plaintext">"Event" signal creator, emphasizing id + level.
Advanced: if resulting config value is a single top-level symbol, it will
be evaluated during macro expansion.
TIP!: Use the {:return :explain} option in tests or at the REPL to
verify/inspect resulting config value, config source, and specific
search order of prop/env/res ids.</pre></div></div><divclass="public anchor"id="var-get-filters"><h3>get-filters</h3><h4class="lang"><ahref="taoensso.telemere.html#var-get-filters">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(get-filters)</code></div><divclass="doc"><preclass="plaintext">Returns current ?{:keys [compile-time runtime]} filter config.
for all registered signal handlers.</pre></div></div><divclass="public anchor"id="var-get-handlers-stats"><h3>get-handlers-stats</h3><h4class="lang"><ahref="taoensso.telemere.html#var-get-handlers-stats">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(get-handlers-stats)</code></div><divclass="doc"><preclass="plaintext">Alpha, subject to change.
Returns ?{<handler-id> {:keys [handling-nsecs counts]}} for all registered
signal handlers that have the `:track-stats?` dispatch option enabled
(it is by default).
Stats include:
`:handling-nsecs` - Summary stats of nanosecond handling times, keys:
`:min` - Minimum handling time
`:max` - Maximum handling time
`:mean` - Arithmetic mean handling time
`:mad` - Mean absolute deviation of handling time (measure of dispersion)
`:var` - Variance of handling time (measure of dispersion)
`:p50` - 50th percentile of handling time (50% of times <= this)
`:p90` - 90th percentile of handling time (90% of times <= this)
`:p99` - 99th percentile of handling time
`:last` - Most recent handling time
...
`:counts` - Integer counts for handler outcomes, keys (chronologically):
`:dropped` - Noop handler calls due to stopped handler
`:back-pressure` - Handler calls that experienced (async) back-pressure
(possible noop, depending on back-pressure mode)
`:sampled` - Noop handler calls due to sample rate
`:filtered` - Noop handler calls due to kind/ns/id/level/when filtering
`:rate-limited` - Noop handler calls due to rate limit
`:disallowed` - Noop handler calls due to sampling/filtering/rate-limiting
`:allowed` - Other handler calls (no sampling/filtering/rate-limiting)
`:suppressed` - Noop handler calls due to nil middleware result
`:handled` - Handler calls that completed successfully
`:errors` - Handler calls that threw an error
Note that for performance reasons returned counts are not mutually atomic,
e.g. `:sampled` count may be incremented before `:disallowed` count is.
Useful for understanding/debugging how your handlers behave in practice,
especially when they're under stress (high-volumes, etc.).
Handler stats are tracked from the time each handler is last registered
(e.g. with an `add-handler!` call).</pre></div></div><divclass="public anchor"id="var-get-min-levels"><h3>get-min-levels</h3><h4class="lang"><ahref="taoensso.telemere.html#var-get-min-levels">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(get-min-levels)</code><code>(get-min-levels kind)</code><code>(get-min-levels kind ns)</code></div><divclass="doc"><preclass="plaintext">Returns current ?{:keys [compile-time runtime]} minimum signal levels.
`resources/` dir.</pre></div></div><divclass="public anchor"id="var-help.3Afilters"><h3>help:filters</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Afilters">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">A signal will be provided to a handler iff ALL of the following are true:
Compile-time filters are an advanced feature that can be tricky to set
and use correctly. Most folks will want ONLY runtime filters.
Compile-time filters works by eliding (completely removing the code for)
disallowed signals. This means zero performance cost for these signals,
but also means that compile-time filters are PERMANENT once applied.
So if you set `:info` as the compile-time minimum level, that'll REMOVE
CODE for every signal below `:info` level. To decrease that minimum level,
you'll need to rebuild.
Compile-time filters can be set ONLY with environmental config
(see `help:environmental-config` for details).
Signal and handler sampling is multiplicative:
Both signals and handlers can have independent sample rates, and these
MULTIPLY! If a signal is created with 20% sampling and a handler
handles 50% of received signals, then 10% of possible signals will be
handled (50% of 20%).
The final (multiplicative) rate is helpfully reflected in each signal's
`:sample-rate` value.
For more info:
- On signal filters, see: `help:filters`
- On handler filters, see: `help:handler-dispatch-options`
If anything is unclear, please ping me (@ptaoussanis) so that I can
improve these docs!</pre></div></div><divclass="public anchor"id="var-help.3Ahandler-dispatch-options"><h3>help:handler-dispatch-options</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Ahandler-dispatch-options">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Dispatch options can be provided for each signal handler when calling
`add-handler!` or `with-handler/+`. These options will be merged over the
defaults specified by `default-handler-dispatch-opts`.
All handlers support the same dispatch options, including:
`:async` (Clj only) options include:
`:buffer-size` (default 1024)
Size of request buffer, and the max number of pending requests before
configured back-pressure behaviour is triggered (see `:mode`).
{"1/sec" [1 1000]} => Max 1 call per 1000 msecs
{"1/sec" [1 1000]
"10/min" [10 60000]} => Max 1 call per 1000 msecs,
and 10 calls per 60 secs
`:middleware` (default nil => no middleware)
Optional (fn [signal]) => ?modified-signal to apply before
handling signal. When middleware returns nil, skips handler.
Compose multiple middleware fns together with `comp-middleware`.
`:error-fn` - (fn [{:keys [handler-id signal error]}]) to call on handler error.
`:backp-fn` - (fn [{:keys [handler-id ]}]) to call on handler back-pressure.
If anything is unclear, please ping me (@ptaoussanis) so that I can
improve these docs!</pre></div></div><divclass="public anchor"id="var-help.3Ahandlers"><h3>help:handlers</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Ahandlers">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Signal handlers process created signals to do something with them (analyse them,
write them to console/file/queue/db, etc.).
Manage handlers with:
`get-handlers` - Returns info on registered handlers (dispatch options, etc.)
`get-handlers-stats` - Returns stats for registered handlers (handling times, etc.)
`add-handler!` - Registers given handler
`remove-handler!` - Unregisters given handler
`with-handler` - Executes form with ONLY the given handler registered
`with-handler+` - Executes form with the given handler (also) registered
improve these docs!</pre></div></div><divclass="public anchor"id="var-help.3Asignal-content"><h3>help:signal-content</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Asignal-content">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Signals are maps with {:keys [inst id ns level data msg_ ...]}, though they
can be modified by signal and/or handler middleware.
[2] `java.lang.Throwable` or `js/Error`</pre></div></div><divclass="public anchor"id="var-help.3Asignal-creators"><h3>help:signal-creators</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Asignal-creators">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Call a Telemere signal creator to conditionally create a signal at that callsite.
When filtering conditions are met [4], the call creates a Telemere signal [3]
and dispatches it to registered handlers for processing (e.g. writing to
console/file/queue/db, etc.).
Telemere doesn't make a hard distinction between different kinds of signals
(log, event, error, etc.) - they're all just plain Clojure/Script maps with
various keys:
- All signal creators offer the same options [2], and
- All signal kinds can contain the same content [3]
Creators vary only in in their default options and call APIs (expected args
and return values), making them more/less convenient for certain use cases:
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-help.3Asignal-options"><h3>help:signal-options</h3><h4class="lang"><ahref="taoensso.telemere.html#var-help.3Asignal-options">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Signal options (shared by all signal creators):
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-msg-skip"><h3>msg-skip</h3><h4class="lang"><ahref="taoensso.telemere.html#var-msg-skip">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext"></pre></div></div><divclass="public anchor"id="var-msg-splice"><h3>msg-splice</h3><h4class="lang"><ahref="taoensso.telemere.html#var-msg-splice">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(msg-splice args)</code></div><divclass="doc"><preclass="plaintext">For use within signal message vectors.
%> {:msg_ "Username: Steve"}</pre></div></div><divclass="public anchor"id="var-newline"><h3>newline</h3><h4class="lang"><ahref="taoensso.telemere.html#var-newline">clj</a></h4><h4class="lang current">cljs</h4><h4class="added">added in Encore v3.68.0 (2023-09-25)</h4><divclass="usage"></div><divclass="doc"><preclass="plaintext">Single system newline
See also `format-signal-fn` for an alternative to `pr-signal-fn`
that produces human-readable output.</pre></div></div><divclass="public anchor"id="var-rate-limiter"><h3>rate-limiter</h3><h4class="lang"><ahref="taoensso.telemere.html#var-rate-limiter">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(rate-limiter spec)</code><code>(rate-limiter opts spec)</code></div><divclass="doc"><preclass="plaintext">Takes a spec of form
Or call the returned limiter fn with an extra command argument:
(limiter-fn :rl/peek <req-id) - Check limits WITHOUT incrementing count
(limiter-fn :rl/reset <req-id) - Reset all limits for given req-id</pre></div></div><divclass="public anchor"id="var-remove-handler.21"><h3>remove-handler!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-remove-handler.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(remove-handler! handler-id)</code></div><divclass="doc"><preclass="plaintext">Stops and deregisters signal handler with given id, and returns
still registered.</pre></div></div><divclass="public anchor"id="var-set-ctx.21"><h3>set-ctx!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-ctx.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-ctx! root-ctx-val)</code></div><divclass="doc"><preclass="plaintext">Set `*ctx*` var's default (root) value. See `*ctx*` for details.
</pre></div></div><divclass="public anchor"id="var-set-id-filter.21"><h3>set-id-filter!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-id-filter.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-id-filter! id-filter)</code></div><divclass="doc"><preclass="plaintext">Sets signal id filter based on given `id-filter` spec.
If present, `:disallow` spec MUST NOT match.</pre></div></div><divclass="public anchor"id="var-set-kind-filter.21"><h3>set-kind-filter!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-kind-filter.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-kind-filter! kind-filter)</code></div><divclass="doc"><preclass="plaintext">Sets signal kind filter based on given `kind-filter` spec.
If present, `:disallow` spec MUST NOT match.</pre></div></div><divclass="public anchor"id="var-set-middleware.21"><h3>set-middleware!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-middleware.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-middleware! ?root-middleware-fn)</code></div><divclass="doc"><preclass="plaintext">Set `*middleware*` var's default (root) value. See `*middleware*` for details.
</pre></div></div><divclass="public anchor"id="var-set-min-level.21"><h3>set-min-level!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-min-level.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-min-level! min-level)</code><code>(set-min-level! kind min-level)</code><code>(set-min-level! kind ns-filter min-level)</code></div><divclass="doc"><preclass="plaintext">Sets minimum signal level based on given `min-level` spec.
(set-min-level! nil *ns* :debug)</pre></div></div><divclass="public anchor"id="var-set-ns-filter.21"><h3>set-ns-filter!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-set-ns-filter.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(set-ns-filter! ns-filter)</code></div><divclass="doc"><preclass="plaintext">Sets signal namespace filter based on given `ns-filter` spec.
If present, `:disallow` spec MUST NOT match.</pre></div></div><divclass="public anchor"id="var-set-var-root.21"><h3>set-var-root!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-set-var-root.21">clj</a></h4><h4class="lang current">cljs</h4><h4class="added">added in Encore v3.75.0 (2024-01-29)</h4><divclass="usage"><code>(set-var-root! var-sym root-val)</code></div><divclass="doc"><preclass="plaintext">Sets root binding (value) of the var identified by given symbol, and returns
the new value. Cross-platform. See also `update-var-root!`.</pre></div></div><divclass="public anchor"id="var-signal.21"><h3>signal!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-signal.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(signal! {:as opts, :keys [elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error run & kvs]})</code></div><divclass="doc"><preclass="plaintext">Low-level generic signal creator.
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-signal-allowed.3F"><h3>signal-allowed?</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-signal-allowed.3F">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(signal-allowed? {:as opts, :keys [elidable? location sample-rate kind ns id level when rate-limit rate-limit-by]})</code></div><divclass="doc"><preclass="plaintext">Returns true iff signal with given opts would meet filtering conditions:
(log! {:allow? true} "Message 2"))</pre></div></div><divclass="public anchor"id="var-spy.21"><h3>spy!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-spy.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(spy! form)</code><code>(spy! level form)</code><code>(spy! {:as opts, :keys [elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error run & kvs]} form)</code></div><divclass="doc"><preclass="plaintext">"Spy" signal creator, emphasizing form + level.
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-stop-handlers.21"><h3>stop-handlers!</h3><h4class="lang"><ahref="taoensso.telemere.html#var-stop-handlers.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(stop-handlers!)</code></div><divclass="doc"><preclass="plaintext">Stops registered signal handlers in parallel by calling each
handler-fn with no arguments. This gives each handler the opportunity
to flush buffers, close files, etc.
Each handler will immediately stop accepting new signals, nooping if called.
completed that could create signals.</pre></div></div><divclass="public anchor"id="var-trace.21"><h3>trace!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-trace.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(trace! form)</code><code>(trace! id form)</code><code>(trace! {:as opts, :keys [elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error run & kvs]} form)</code></div><divclass="doc"><preclass="plaintext">"Trace" signal creator, emphasizing form + id.
[4] See `help:signal-filters` - (by ns/kind/id/level, sampling, etc.)</pre></div></div><divclass="public anchor"id="var-uncaught-.3Eerror.21"><h3>uncaught->error!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-uncaught-.3Eerror.21">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(uncaught->error!)</code><code>(uncaught->error! id)</code><code>(uncaught->error! {:as opts, :keys [elidable? location inst uid middleware sample-rate kind ns id level when rate-limit rate-limit-by ctx parent root trace? do let data msg error & kvs]})</code></div><divclass="doc"><preclass="plaintext">Uses `uncaught->handler!` so that `error!` will be called for
See `uncaught->handler!` and `error!` for details.</pre></div></div><divclass="public anchor"id="var-update-var-root.21"><h3>update-var-root!</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-update-var-root.21">clj</a></h4><h4class="lang current">cljs</h4><h4class="added">added in Encore v3.68.0 (2023-09-25)</h4><divclass="usage"><code>(update-var-root! var-sym update-fn)</code></div><divclass="doc"><preclass="plaintext">Updates root binding (value) of the var identified by given symbol, and returns
See also `set-var-root!`.</pre></div></div><divclass="public anchor"id="var-with-ctx"><h3>with-ctx</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-ctx">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-ctx ctx-val form)</code></div><divclass="doc"><preclass="plaintext">Evaluates given form with given `*ctx*` value. See `*ctx*` for details.
</pre></div></div><divclass="public anchor"id="var-with-ctx.2B"><h3>with-ctx+</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-ctx.2B">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-ctx+ update-map-or-fn form)</code></div><divclass="doc"><preclass="plaintext">Evaluates given form with updated `*ctx*` value.
`update-map-or-fn` may be:
- A map to merge with current `*ctx*` value, or
- A unary fn to apply to current `*ctx*` value
See `*ctx*` for details.</pre></div></div><divclass="public anchor"id="var-with-err-.3Etelemere"><h3>with-err->telemere</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-err-.3Etelemere">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-err->telemere form)</code><code>(with-err->telemere opts form)</code></div><divclass="doc"><preclass="plaintext">Executes form with `*err*` bound to flush to Telemere signals with given opts.
</pre></div></div><divclass="public anchor"id="var-with-handler"><h3>with-handler</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-handler">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-handler handler-id handler-fn form)</code><code>(with-handler handler-id handler-fn dispatch-opts form)</code></div><divclass="doc"><preclass="plaintext">Executes form with ONLY the given signal handler registered.
See `help:handler-dispatch-options` for handler filters, etc.
See also `with-handler+`.</pre></div></div><divclass="public anchor"id="var-with-handler.2B"><h3>with-handler+</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-handler.2B">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-handler+ handler-id handler-fn form)</code><code>(with-handler+ handler-id handler-fn dispatch-opts form)</code></div><divclass="doc"><preclass="plaintext">Executes form with the given signal handler (also) registered.
See `help:handler-dispatch-options` for handler filters, etc.
See also `with-handler`.</pre></div></div><divclass="public anchor"id="var-with-id-filter"><h3>with-id-filter</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-id-filter">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-id-filter id-filter form)</code></div><divclass="doc"><preclass="plaintext">Executes form with given signal id filter in effect.
See `set-id-filter!` for details.</pre></div></div><divclass="public anchor"id="var-with-kind-filter"><h3>with-kind-filter</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-kind-filter">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-kind-filter kind-filter form)</code></div><divclass="doc"><preclass="plaintext">Executes form with given signal kind filter in effect.
See `set-kind-filter!` for details.</pre></div></div><divclass="public anchor"id="var-with-middleware"><h3>with-middleware</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-middleware">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-middleware ?middleware-fn form)</code></div><divclass="doc"><preclass="plaintext">Evaluates given form with given `*middleware*` value.
See `*middleware*` for details.</pre></div></div><divclass="public anchor"id="var-with-min-level"><h3>with-min-level</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-min-level">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-min-level min-level form)</code><code>(with-min-level kind min-level form)</code><code>(with-min-level kind ns-filter min-level form)</code></div><divclass="doc"><preclass="plaintext">Executes form with given minimum signal level in effect.
See `set-min-level!` for details.</pre></div></div><divclass="public anchor"id="var-with-ns-filter"><h3>with-ns-filter</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-ns-filter">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-ns-filter ns-filter form)</code></div><divclass="doc"><preclass="plaintext">Executes form with given signal namespace filter in effect.
See `set-ns-filter!` for details.</pre></div></div><divclass="public anchor"id="var-with-out-.3Etelemere"><h3>with-out->telemere</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-out-.3Etelemere">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-out->telemere form)</code><code>(with-out->telemere opts form)</code></div><divclass="doc"><preclass="plaintext">Executes form with `*out*` bound to flush to Telemere signals with given opts.
See also `with-signals`.</pre></div></div><divclass="public anchor"id="var-with-signals"><h3>with-signals</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-with-signals">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(with-signals form)</code><code>(with-signals trap-signals? form)</code><code>(with-signals raw-msgs? trap-signals? form)</code></div><divclass="doc"><preclass="plaintext">Experimental, subject to change.
with given opts.</pre></div></div><divclass="public anchor"id="var-without-filters"><h3>without-filters</h3><h4class="type">macro</h4><h4class="lang"><ahref="taoensso.telemere.html#var-without-filters">clj</a></h4><h4class="lang current">cljs</h4><divclass="usage"><code>(without-filters form)</code></div><divclass="doc"><preclass="plaintext">Executes form without any runtime signal filters.