diff --git a/index.clj.html b/index.clj.html index f6ee439..62ac965 100644 --- a/index.clj.html +++ b/index.clj.html @@ -1,3 +1,3 @@ -Telemere 1.0.0-SNAPSHOT

Telemere 1.0.0-SNAPSHOT

Released under the Eclipse Public License - v 1.0

Structured telemetry library for Clojure/Script.

Installation

To install, add the following dependency to your project or build file:

[com.taoensso/telemere "1.0.0-SNAPSHOT"]

Namespaces

taoensso.telemere

Structured telemetry for Clojure/Script applications.
\ No newline at end of file +Telemere 1.0.0-SNAPSHOT

Telemere 1.0.0-SNAPSHOT

Released under the Eclipse Public License - v 1.0

Structured telemetry library for Clojure/Script.

Installation

To install, add the following dependency to your project or build file:

[com.taoensso/telemere "1.0.0-SNAPSHOT"]

Namespaces

taoensso.telemere

Structured telemetry for Clojure/Script applications.
\ No newline at end of file diff --git a/index.cljs.html b/index.cljs.html index e1c7ab3..3b2e4d9 100644 --- a/index.cljs.html +++ b/index.cljs.html @@ -1,3 +1,3 @@ -Telemere 1.0.0-SNAPSHOT

Telemere 1.0.0-SNAPSHOT

Released under the Eclipse Public License - v 1.0

Structured telemetry library for Clojure/Script.

Installation

To install, add the following dependency to your project or build file:

[com.taoensso/telemere "1.0.0-SNAPSHOT"]

Namespaces

taoensso.telemere

Structured telemetry for Clojure/Script applications.
\ No newline at end of file +Telemere 1.0.0-SNAPSHOT

Telemere 1.0.0-SNAPSHOT

Released under the Eclipse Public License - v 1.0

Structured telemetry library for Clojure/Script.

Installation

To install, add the following dependency to your project or build file:

[com.taoensso/telemere "1.0.0-SNAPSHOT"]

Namespaces

taoensso.telemere

Structured telemetry for Clojure/Script applications.
\ No newline at end of file diff --git a/taoensso.telemere.cljs.html b/taoensso.telemere.cljs.html index 01536ed..195e1b9 100644 --- a/taoensso.telemere.cljs.html +++ b/taoensso.telemere.cljs.html @@ -1,9 +1,9 @@ -taoensso.telemere documentation

taoensso.telemere

Structured telemetry for Clojure/Script applications.
+taoensso.telemere documentation

taoensso.telemere

Structured telemetry for Clojure/Script applications.
 
 See the GitHub page (esp. Wiki) for info on motivation and design:
-  <https://www.taoensso.com/telemere>

*ctx*

dynamic

clj

cljs

Dynamic context: arbitrary app-level state attached as `:ctx` to all signals.
+  <https://www.taoensso.com/telemere>

*ctx*

dynamic

clj

cljs

Dynamic context: arbitrary user-level state attached as `:ctx` to all signals.
 Value may be any type, but is usually nil or a map.
 
 Re/bind dynamic     value using `with-ctx`, `with-ctx+`, or `binding`.
@@ -27,6 +27,7 @@ Modify  root (base) value using `set-middleware!`.

chance

clj

cljs

check-interop

clj

cljs

default-ctx

clj

cljs

Advanced feature. Default root (base) value of `*ctx*` var, controlled by:
   (get-env {:as :edn} :taoensso.telemere/default-ctx<.platform><.edn>)
 
-See `get-env` for details.

filtering-help

clj

cljs

Your filter config determines which signal calls will be enabled.
+See `get-env` for details.

format-error

clj

cljs

(format-error error)(format-error _ error)
TODO Docstring
+

format-instant

clj

cljs

(format-instant instant)(format-instant {:keys [format]} instant)
TODO Docstring
+

get-filters

clj

cljs

(get-filters)
Returns current ?{:keys [compile-time runtime]} filter config.
+

get-handlers

clj

cljs

(get-handlers)
Returns ?{<handler-id> {:keys [dispatch-opts handler-fn]}} for all
+registered signal handlers.

get-min-level

clj

cljs

(get-min-level)(get-min-level kind)(get-min-level kind ns)
Returns current ?{:keys [compile-time runtime]} minimum levels.
+

help:filters

clj

cljs

Your filter config determines which signal calls will be allowed.
 
 Filtering can occur at compile-time (=> elision), or runtime.
 Both compile-time and runtime config can be specified via:
@@ -116,6 +124,7 @@ Both compile-time and runtime config can be specified via:
      classpath resources). See library docs for details.
 
   2. The filter API consting of the following:
+
     `set-ns-filter!`,     `with-ns-filter`      - for filtering calls by namespace
     `set-minimum-level!`, `with-minimum-level!` - for filtering calls by signal level
     `set-id-filter!`,     `with-id-filter`      - for filtering calls by signal id   (when relevant)
@@ -127,17 +136,14 @@ Additional filtering can also be applied on a per-handler basis, see
 `add-handler!` for details.
 
 See also:
+
   `get-filters`     - to see current filter config
   `get-min-level`   - to see current minimum level
   `without-filters` - to disable all runtime filtering
 
 If anything is unclear, please ping me (@ptaoussanis) so that I can
-improve these docs!

format-error

clj

cljs

(format-error error)(format-error _ error)
TODO Docstring
-

format-instant

clj

cljs

(format-instant instant)(format-instant {:keys [format]} instant)
TODO Docstring
-

get-filters

clj

cljs

(get-filters)
Returns current ?{:keys [compile-time runtime]} filter config.
-

get-handlers

clj

cljs

(get-handlers)
Returns ?{<handler-id> {:keys [dispatch-opts handler-fn]}} for all
-registered signal handlers.

get-min-level

clj

cljs

(get-min-level)(get-min-level kind)(get-min-level kind ns)
Returns current ?{:keys [compile-time runtime]} minimum levels.
-

handlers-help

clj

cljs

The handler API consists of the following:
+improve these docs!

help:handlers

clj

cljs

The handler API consists of the following:
+
   `get-handlers`    - Returns info on currently registered handlers
   `add-handler!`    - Used to   register handlers
   `remove-handler!` - Used to unregister handlers
@@ -148,20 +154,20 @@ If anything is unclear, please ping me (@ptaoussanis) so that I can
 improve these docs!

level-aliases

clj

cljs

msg-skip

clj

cljs

msg-splice

clj

cljs

newline

clj

cljs

rate-limiter

clj

cljs

remove-handler!

clj

cljs

(remove-handler! handler-id)
Deregisters signal handler with given id, and returns
 ?{<handler-id> {:keys [dispatch-opts handler-fn]}} for all signal handlers
 still registered.

set-id-filter!

clj

cljs

(set-id-filter! id-filter)
Sets signal call id filter based on given `id-filter` spec.
-
 `id-filter` may be:
+
   - A regex pattern of id/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
   - {:allow <spec> :deny <spec>} with specs as above.

set-kind-filter!

clj

cljs

(set-kind-filter! kind-filter)
Sets signal call kind filter based on given `kind-filter` spec.
-
 `kind-filter` may be:
+
   - A regex pattern of kind/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
   - {:allow <spec> :deny <spec>} with specs as above.

set-min-level!

clj

cljs

(set-min-level! min-level)(set-min-level! kind min-level)(set-min-level! kind ns-filter min-level)
Sets minimum signal call level based on given `min-level` spec.
-
 `min-level` may be:
+
   - An integer.
   - A level keyword (see `level-aliases` var for details).
 
@@ -171,8 +177,8 @@ See `set-ns-filter!` for details.
 
 If non-nil `kind` is provided, then the given minimum level
 will apply only for that signal kind.

set-ns-filter!

clj

cljs

(set-ns-filter! ns-filter)
Sets signal call namespace filter based on given `ns-filter` spec.
-
 `ns-filter` may be:
+
   - A regex pattern of namespace/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
diff --git a/taoensso.telemere.html b/taoensso.telemere.html
index 3a2fed2..0ec85f7 100644
--- a/taoensso.telemere.html
+++ b/taoensso.telemere.html
@@ -1,9 +1,9 @@
 
-taoensso.telemere documentation

taoensso.telemere

Structured telemetry for Clojure/Script applications.
+taoensso.telemere documentation

taoensso.telemere

Structured telemetry for Clojure/Script applications.
 
 See the GitHub page (esp. Wiki) for info on motivation and design:
-  <https://www.taoensso.com/telemere>

*ctx*

dynamic

clj

cljs

Dynamic context: arbitrary app-level state attached as `:ctx` to all signals.
+  <https://www.taoensso.com/telemere>

*ctx*

dynamic

clj

cljs

Dynamic context: arbitrary user-level state attached as `:ctx` to all signals.
 Value may be any type, but is usually nil or a map.
 
 Re/bind dynamic     value using `with-ctx`, `with-ctx+`, or `binding`.
@@ -27,6 +27,7 @@ Modify  root (base) value using `set-middleware!`.

catch->error!

macro

clj

(catch->error! form)(catch->error! level form)(catch->error! {:as opts, :keys [rethrow? catch-val elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error & user-opts]} form)
TODO Docstring [form] [id-or-opts form] => run value or ?catch-val
-

chance

clj

cljs

(chance prob)
Returns true with given probability ∈ ℝ[0,1].
+  otherwise calls will be suppressed before reaching handlers.

catch->error!

macro

clj

(catch->error! form)(catch->error! id form)(catch->error! {:as opts, :keys [rethrow? catch-val elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error & user-opts]} form)
Unconditionally executes given form and-
+  If form succeeds: return the form's result.
+  If form   throws:
+    Call `error!` with the thrown error and the given signal options [1],
+    then return (:catch-val opts) if it exists, or rethrow the error.
+
+API: [form] [id-or-opts form] => form's result (value/throw) (unconditional), or (:catch-val opts)
+Default  kind: `:error`
+Default level: `:error`
+
+Examples:
+
+  (catch->error! (/ 1 0)) ; %> {:kind :error, :level :error, :error <caught> ...}
+  (catch->error! {:id ::my-id, :catch-val "threw"} (/ 1 0)) ; %> {... :id ::my-id ...}
+  (catch->error!
+    {:let  [x "x"] ; Available to `:data` and `:msg`
+     :data {:x x}
+     :msg_ ["My msg:" x]}
+     (/ 1 0)) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (catch->error! ...)).
+  - Supports the same options as other signals [1].
+
+  - Useful for recording errors in forms, futures, callbacks, etc.
+
+See also `error!`.
+
+[1] See `help:signal-options` docstring

chance

clj

cljs

(chance prob)
Returns true with given probability ∈ ℝ[0,1].
 

check-interop

clj

cljs

(check-interop)
Experimental, subject to change.
 Runs Telemere's registered interop checks and returns
 {<interop-id> {:keys [sending->telemere? telemere-receiving? ...]}}.
@@ -113,34 +144,68 @@ Runs Telemere's registered interop checks and returns
 Useful for tests/debugging.

default-ctx

clj

cljs

Advanced feature. Default root (base) value of `*ctx*` var, controlled by:
   (get-env {:as :edn} :taoensso.telemere/default-ctx<.platform><.edn>)
 
-See `get-env` for details.

error!

macro

clj

(error! error)(error! id error)(error! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error & user-opts]} error)
TODO Docstring [error] [id-or-opts error] => error
-(throw (error! <error>)) example.

event!

macro

clj

(event! id)(event! level id)(event! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error & user-opts]} id)
TODO Docstring [id] [level-or-opts id] => allowed?
-

filtering-help

clj

cljs

Your filter config determines which signal calls will be enabled.
+See `get-env` for details.

error!

macro

clj

(error! error)(error! id error)(error! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error & user-opts]} error)
"Error" signal call, focused on error + id.
 
-Filtering can occur at compile-time (=> elision), or runtime.
-Both compile-time and runtime config can be specified via:
+API: [error] [id-or-opts error] => given error (unconditional)
+Default  kind: `:error`
+Default level: `:error`
 
-  1. System values (JVM properties, environment variables, or
-     classpath resources). See library docs for details.
+Examples:
 
-  2. The filter API consting of the following:
-    `set-ns-filter!`,     `with-ns-filter`      - for filtering calls by namespace
-    `set-minimum-level!`, `with-minimum-level!` - for filtering calls by signal level
-    `set-id-filter!`,     `with-id-filter`      - for filtering calls by signal id   (when relevant)
-    `set-kind-filter!`,   `with-kind-filter`    - for filtering calls by signal kind (when relevant)
+  (throw (error!         (ex-info "MyEx" {}))) ; %> {:kind :error, :level :error, :error <MyEx> ...}
+  (throw (error! ::my-id (ex-info "MyEx" {}))) ; %> {... :id ::my-id ...}
+  (throw
+    (error!
+      {:let  [x "x"] ; Available to `:data` and `:msg`
+       :data {:x x}
+       :msg  ["My message:" x]}
 
-    See the relevant docstrings for details.
+      (ex-info "MyEx" {}))) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
 
-Additional filtering can also be applied on a per-handler basis, see
-`add-handler!` for details.
+Tips:
 
-See also:
-  `get-filters`     - to see current filter config
-  `get-min-level`   - to see current minimum level
-  `without-filters` - to disable all runtime filtering
+  - Test using `with-signals`: (with-signals (error! ...)).
+  - Supports the same options as other signals [3].
 
-If anything is unclear, please ping me (@ptaoussanis) so that I can
-improve these docs!

format-error

clj

cljs

(format-error error)(format-error {:keys [use-fonts? sort-stacktrace-by fonts], :or {use-fonts? :auto, sort-stacktrace-by :chronological, fonts clj-commons.format.exceptions/default-fonts}} error)
TODO Docstring
+  - `error` arg is a platform error (`java.lang.Throwable` or `js/Error`).
+  - Can conveniently be wrapped by `throw`: (throw (error! ...)).
+
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

event!

macro

clj

(event! id)(event! id level)(event! id {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error & user-opts]})
"Event" signal call, focused on id + level.
+
+API: [id] [id level-or-opts] => true iff signal call was allowed
+Default  kind: `:event`
+Default level: `:info`
+
+When conditions are met [1], creates a Telemere signal [2] and dispatches it to
+registered handlers for processing (writing to console/disk/db, etc.).
+
+Examples:
+
+  (event! ::my-id)       ; %> {:kind :event, :level :info, :id ::my-id ...}
+  (event! ::my-id :warn) ; %> {...           :level :warn ...}
+  (event! ::my-id
+    {:let  [x "x"] ; Available to `:data` and `:msg`
+     :data {:x x}
+     :msg  ["My msg:" x]}) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (error! ...)).
+  - Supports the same options as other signals [3].
+
+  - A good general-purpose signal, prefer to `log!` by default, since it
+    better encourages structured data over unstructured messages.
+
+  - Has a different 2-arity arg order to all other signals!
+    Mnemonic: the arg that's typically larger is *always* in the rightmost
+    position, and for `event!` that's the `level-or-opts` arg.
+
+----------------------------------------
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

format-error

clj

cljs

(format-error error)(format-error {:keys [use-fonts? sort-stacktrace-by fonts], :or {use-fonts? :auto, sort-stacktrace-by :chronological, fonts clj-commons.format.exceptions/default-fonts}} error)
TODO Docstring
 

format-instant

clj

cljs

(format-instant instant)(format-instant {:keys [formatter], :or {formatter java.time.format.DateTimeFormatter/ISO_INSTANT}} instant)
TODO Docstring
 

get-env

macro

clj

added in Encore v3.75.0 (2024-01-29)

(get-env {:keys [as default return]} spec)(get-env {:keys [as default return spec], :or {as :str, return :value}})
Cross-platform util for embedding flexible environmental config during
 macro expansion. Used by other Taoensso libraries.
@@ -195,7 +260,35 @@ Result must be something that can be safely embedded in code during
 macro-expansion. Symbols in edn will be evaluated during expansion.

get-filters

clj

cljs

(get-filters)
Returns current ?{:keys [compile-time runtime]} filter config.
 

get-handlers

clj

cljs

(get-handlers)
Returns ?{<handler-id> {:keys [dispatch-opts handler-fn]}} for all
 registered signal handlers.

get-min-level

clj

cljs

(get-min-level)(get-min-level kind)(get-min-level kind ns)
Returns current ?{:keys [compile-time runtime]} minimum levels.
-

handlers-help

clj

cljs

The handler API consists of the following:
+

help:filters

clj

cljs

Your filter config determines which signal calls will be allowed.
+
+Filtering can occur at compile-time (=> elision), or runtime.
+Both compile-time and runtime config can be specified via:
+
+  1. System values (JVM properties, environment variables, or
+     classpath resources). See library docs for details.
+
+  2. The filter API consting of the following:
+
+    `set-ns-filter!`,     `with-ns-filter`      - for filtering calls by namespace
+    `set-minimum-level!`, `with-minimum-level!` - for filtering calls by signal level
+    `set-id-filter!`,     `with-id-filter`      - for filtering calls by signal id   (when relevant)
+    `set-kind-filter!`,   `with-kind-filter`    - for filtering calls by signal kind (when relevant)
+
+    See the relevant docstrings for details.
+
+Additional filtering can also be applied on a per-handler basis, see
+`add-handler!` for details.
+
+See also:
+
+  `get-filters`     - to see current filter config
+  `get-min-level`   - to see current minimum level
+  `without-filters` - to disable all runtime filtering
+
+If anything is unclear, please ping me (@ptaoussanis) so that I can
+improve these docs!

help:handlers

clj

cljs

The handler API consists of the following:
+
   `get-handlers`    - Returns info on currently registered handlers
   `add-handler!`    - Used to   register handlers
   `remove-handler!` - Used to unregister handlers
@@ -203,12 +296,139 @@ registered signal handlers.

hostname

clj

(hostname)(hostname timeout-msecs timeout-val)
Returns local cached hostname string, or `timeout-val` (default "UnknownHost").
+improve these docs!

help:signal-content

clj

Signals are initially maps with {:keys [instant id ns level data msg_ ...]},
+though they can be modified by call and/or handler middleware.
+
+Default keys:
+
+`:schema-version` - Int version of signal schema (current: 1)
+
+`:instant` - Platform instant [1] when signal was created
+`:level`   - Signal level ∈ #{<int> :trace :debug :info :warn :error :fatal :report ...}
+`:kind`    - Signal ?kind ∈ #{nil :event :error :log :trace :spy <user-val> ...}
+`:id`      - ?id of signal call     (common to all signals created by signal call, contrast with `:uid`)
+`:uid`     - ?id of signal instance (unique to each signal created by signal call, contrast with `:id`)
+
+`:data`  - Arb user-level data     ?val (usu. a map) given to signal call
+`:msg`   - Arb user-level message  ?str              given to signal call
+`:error` - Arb user-level platform ?error [2]        given to signal call
+
+`:run-form`     - Unevaluated ?form given to signal macro as `:run`
+`:run-value`    - Successful return ?val of  `:run` ?form
+`:end-instant`  - Platform ?instant [1] when `:run` ?form completed
+`:runtime-nsecs`- ?int nanosecs runtime of   `:run` ?form
+
+`:ctx`      - ?val of `*ctx*` (arb user-level state) when signal was created
+`:parent`   - ?{:keys [id uid]} of parent signal, present in nested signals when tracing
+`:location` - ?{:keys [ns file line column]} signal call location
+`:ns`       - ?str namespace of signal call, same as (:ns     location)
+`:file`     - ?str filename  of signal call, same as (:file   location)
+`:line`     - ?int line      of signal call, same as (:line   location)
+`:column`   - ?int column    of signal call, same as (:column location)
+
+`:sample-rate` - ?rate ∈ℝ[0,1] for combined call AND handler sampling (0.75 => allow 75% of signals, nil => allow all)
+
+If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
+
+[1] Clj: `java.time.Instant`,    Cljs: `js/Date`
+[2] Clj: `java.lang.Throwable`,  Cljs: `js/Error`

help:signal-handling

clj

A signal will be provided to a handler iff ALL of the following are true:
+
+  1. Signal call is allowed by compile-time filters
+  2. Signal call is allowed by runtime      filters
+  3. Handler     is allowed by runtime      filters
+
+  4. Signal call middleware does not suppress the signal (return nil)
+  5. Handler     middleware does not suppress the signal (return nil)
+
+For more info:
+
+  - On call    filters, see: `help:filters`  docstring
+  - On handler filters, see: `help:handlers` docstring
+  - On signal flow,     see: Ref. <https://tinyurl.com/telemere-signal-flowchart>
+
+If anything is unclear, please ping me (@ptaoussanis) so that I can
+improve these docs!

help:signal-options

clj

Signal options (shared by `signal!`, `event!`, ...):
+
+`:instant` - Platform instant [1] when signal was created, ∈ #{nil :auto <user-val>}
+`:level`   - Signal level ∈ #{<int> :trace :debug :info :warn :error :fatal :report ...}
+`:kind`    - Signal ?kind ∈ #{nil :event :error :log :trace :spy <user-val> ...}
+`:id`      - ?id of signal call     (common to all signals created by signal call, contrast with `:uid`)
+`:uid`     - ?id of signal instance (unique to each signal created by signal call, contrast with `:id`)
+
+`:data`  - Arb user-level ?data    to incl. in signal: usu. a map
+`:msg`   - Arb user-level ?message to incl. in signal: str or vec of strs to join (with `\space`)
+`:error` - Arb user-level ?error   to incl. in signal: platform error [2]
+
+`:run` - ?form    to execute UNCONDITIONALLY; will incl. `:run-value` in signal
+`:do`  - ?form    to execute   conditionally (iff signal allowed), before establishing `:let` ?binding
+`:let` - ?binding to establish conditionally (iff signal allowed), BEFORE evaluating `:data` and `:msg` (useful!)
+
+`:ctx`      - Custom ?val to override auto (dynamic `*ctx*`) in signal
+`:parent`   - Custom ?{:keys [id uid]} to override auto (dynamic) parent signal info in signal
+`:location` - Custom ?{:keys [ns line column file]} to override auto signal call location
+
+`:elidable?`   - Should signal call be subject to compile-time elision? (Default: true)
+`:sample-rate` - ?rate ∈ℝ[0,1] for call sampling (0.75 => allow 75% of signals, nil => allow all)
+`:when`        - Arb ?form; when present, form must return truthy to allow signal
+`:rate-limit`  - ?spec as given to `telemere/rate-limiter`, see its docstring for details
+`:middleware`  - ?[(fn [signal])=>modified-signal ...] call middleware
+`:trace?`      - Should tracing be enabled for `:run` form?
+
+<user-opts>    - Arb user-level ?kvs to incl. in signal
+
+If anything is unclear, please ping me (@ptaoussanis) so that I can improve these docs!
+
+[1] Clj: `java.time.Instant`,    Cljs: `js/Date`
+[2] Clj: `java.lang.Throwable`,  Cljs: `js/Error`

hostname

clj

(hostname)(hostname timeout-msecs timeout-val)
Returns local cached hostname string, or `timeout-val` (default "UnknownHost").
 

level-aliases

clj

cljs

Map of {<level-keyword> <level-integer>} aliases.
-

log!

macro

clj

(log! msg)(log! level msg)(log! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error & user-opts]} msg)
TODO Docstring [msg] [level-or-opts msg] => allowed?
-

msg-skip

clj

cljs

(msg-skip)
TODO Docstring
-

msg-splice

clj

cljs

(msg-splice args)
TODO Docstring
-

newline

clj

cljs

added in Encore v3.68.0 (2023-09-25)

Single system newline
+

log!

macro

clj

(log! msg)(log! level msg)(log! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error & user-opts]} msg)
"Log" signal call, focused on message + level.
+
+API: [msg] [level-or-opts msg] => true iff signal call was allowed.
+Default  kind: `:log`
+Default level: `:info`
+
+When conditions are met [1], creates a Telemere signal [2] and dispatches it to
+registered handlers for processing (writing to console/disk/db, etc.).
+
+Examples:
+
+  (log! "My msg")       ; %> {:kind :log, :level :info, :id ::my-id ...}
+  (log! :warn "My msg") ; %> {...         :level :warn ...}
+  (log!
+    {:let  [x "x"] ; Available to `:data` and `:msg`
+     :data {:x x}}
+
+    ["My msg:" x]) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (log! ...)).
+  - Supports the same options as other signals [3].
+
+  - Prefer `event!` to `log!` by default, since it better encourages structured
+    data over unstructured messages.
+
+  - `msg` arg may be a string, or vector of strings to join with `\space`.
+  - See also `msg-splice`, `msg-skip` utils.
+
+----------------------------------------
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

msg-skip

clj

cljs

For use within signal message vectors.
+Special value that will be ignored (no-op) when creating message.
+Useful for conditionally skipping parts of message content, etc.:
+
+  (signal! {:msg ["Hello" (if <cond> <then> msg-skip) "world"] <...>}) or
+  (log!          ["Hello" (if <cond> <then> msg-skip) "world"]), etc.
+
+    %> {:msg_ "Hello world" <...>}

msg-splice

clj

cljs

(msg-splice args)
For use within signal message vectors.
+Wraps given arguments so that they're spliced when creating message.
+Useful for conditionally splicing in extra message content, etc.:
+
+  (signal! {:msg [(when <cond> (msg-splice ["Username:" "Steve"])) <...>]}) or
+  (log!          [(when <cond> (msg-splice ["Username:" "Steve"]))])
+
+    %> {:msg_ "Username: Steve"}

newline

clj

cljs

added in Encore v3.68.0 (2023-09-25)

Single system newline
 

rate-limiter

clj

cljs

(rate-limiter spec)(rate-limiter opts spec)
Takes a map spec of form {<limit-id> [<n-max-reqs> <msecs-window>]},
 and returns a basic stateful (fn rate-limiter [req-id] [command req-id]).
 
@@ -236,21 +456,21 @@ Example:
 ?{<handler-id> {:keys [dispatch-opts handler-fn]}} for all signal handlers
 still registered.

set-ctx!

macro

clj

(set-ctx! root-val)
Set `*ctx*` var's root (base) value. See `*ctx*` for details.
 

set-id-filter!

clj

cljs

(set-id-filter! id-filter)
Sets signal call id filter based on given `id-filter` spec.
-
 `id-filter` may be:
+
   - A regex pattern of id/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
   - {:allow <spec> :deny <spec>} with specs as above.

set-kind-filter!

clj

cljs

(set-kind-filter! kind-filter)
Sets signal call kind filter based on given `kind-filter` spec.
-
 `kind-filter` may be:
+
   - A regex pattern of kind/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
   - {:allow <spec> :deny <spec>} with specs as above.

set-middleware!

macro

clj

(set-middleware! root-val)
Set `*middleware*` var's root (base) value. See `*middleware*` for details.
 

set-min-level!

clj

cljs

(set-min-level! min-level)(set-min-level! kind min-level)(set-min-level! kind ns-filter min-level)
Sets minimum signal call level based on given `min-level` spec.
-
 `min-level` may be:
+
   - An integer.
   - A level keyword (see `level-aliases` var for details).
 
@@ -260,26 +480,82 @@ See `set-ns-filter!` for details.
 
 If non-nil `kind` is provided, then the given minimum level
 will apply only for that signal kind.

set-ns-filter!

clj

cljs

(set-ns-filter! ns-filter)
Sets signal call namespace filter based on given `ns-filter` spec.
-
 `ns-filter` may be:
+
   - A regex pattern of namespace/s to allow.
   - A str/kw/sym, in which "*"s act as wildcards.
   - A vector or set of regex patterns or strs/kws/syms.
   - {:allow <spec> :deny <spec>} with specs as above.

set-var-root!

macro

clj

added in Encore v3.75.0 (2024-01-29)

(set-var-root! var-sym root-val)
Sets root binding (value) of the var identified by given symbol, and returns
-the new value. Cross-platform. See also `update-var-root!`.

signal!

macro

clj

(signal! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error run & user-opts]})
Expands to a low-level signal call.
+the new value. Cross-platform. See also `update-var-root!`.

signal!

macro

clj

(signal! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error run & user-opts]})
Low-level generic signal call.
 
-TODO Docstring
- - How low-level is this? Should location, ctx, etc. be in public arglists?
- - Describe
- - Reference diagram link [1]
- - Mention ability to delay-wrap :data
- - Mention combo `:sample-rate` stuff (call * handler)
+API: [opts] => depends on options [3]
+Default  kind: none (optional)
+Default level: none (must be provided)
 
-- If :run => returns body run-result (re-throwing)
-  Otherwise returns true iff call allowed
+When conditions are met [1], creates a Telemere signal [2] and dispatches it to
+registered handlers for processing (writing to console/disk/db, etc.).
 
-[1] Ref. <https://github.com/taoensso/telemere/blob/master/signal-flow.svg>

spy!

macro

clj

(spy! form)(spy! id form)(spy! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error run & user-opts]} form)
TODO Docstring [form] [level-or-opts form] => run result (value or throw)
-

streams->reset!

clj

(streams->reset!)
Experimental, subject to change without notice!
+If `:run` option is provided: returns value of given run form, or throws.
+                   Otherwise: returns true iff call conditions were met.
+
+Generic signals are fairly low-level and useful mostly for library authors or
+advanced users writing their own wrapper macros. Regular users will typically
+prefer one of the provided wrapper macros optimized for ease-of-use in
+common cases.
+
+These all use `signal!` underneath and offer the same options, but vary in
+their defaults and the focus of their call APIs (args and return values):
+
+  `event!` - (id      + opts/level) => true iff signal call was allowed
+  `log!`   - (message + opts/level) => true iff signal call was allowed
+  `error!` - (error   + opts/id)    => given error (unconditional)
+  `trace!` - (form    + opts/id)    => form's result (value/throw) (unconditional)
+  `spy!`   - (form    + opts/level) => form's result (value/throw) (unconditional)
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (signal! ...)).
+  - Supports the same options as other signals [3].
+
+----------------------------------------
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

spy!

macro

clj

(spy! form)(spy! id form)(spy! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error run & user-opts]} form)
"Spy" signal call, focused on form + level.
+
+API: [form] [level-or-opts form] => form's result (value/throw) (unconditional)
+Default kind:  `:spy`
+Default level: `:info`
+
+When conditions are met [1], creates a Telemere signal [2] and dispatches it to
+registered handlers for processing (writing to console/disk/db, etc.).
+
+Examples:
+
+  (spy! (+ 1 2))         ; %> {:kind :trace, :level :info, :run-form '(+ 1 2),
+                         ;     :run-value 3, :parent {:keys [id uid]}
+                         ;     :msg "(+ 1 2) => 3" ...}
+  (spy! ::my-id (+ 1 2)) ; %> {... :id ::my-id ...}
+  (spy!
+    {:let  [x "x"] ; Available to `:data` and `:msg`
+     :data {:x x}}
+
+    (+ 1 2)) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (spy! ...)).
+  - Supports the same options as other signals [3].
+
+  - Identical to `trace!`, but focused on form + level rather than form + id.
+
+  - Useful for debugging/monitoring forms, and tracing (nested) execution flow.
+  - Execution of `form` arg may trigger additional (nested) signals.
+    Each signal's `:parent` key will indicate its immediate parent.
+
+----------------------------------------
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

streams->reset!

clj

(streams->reset!)
Experimental, subject to change without notice!
 Resets `System/out` and `System/err` to their original value (prior to any
 `streams->telemere!` call).

streams->telemere!

clj

(streams->telemere!)(streams->telemere! {:keys [out err], :or {out default-out-opts, err default-err-opts}})
Experimental, subject to change without notice!
 
@@ -293,10 +569,51 @@ See also:
   `with-out->telemere`,
   `with-err->telemere`,
   `with-streams->telemere`.

thread-id

clj

(thread-id)

thread-name

clj

(thread-name)

tools-logging->telemere!

clj

(tools-logging->telemere!)
Configures `clojure.tools.logging` to use Telemere as its logging implementation.
-

trace!

macro

clj

(trace! form)(trace! id form)(trace! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error run & user-opts]} form)
TODO Docstring [form] [id-or-opts form] => run result (value or throw)
-

uncaught->error!

macro

clj

(uncaught->error!)(uncaught->error! id)(uncaught->error! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level filter when rate-limit ctx parent trace? let data msg error & user-opts]})
TODO Docstring
-See also `uncaught->handler!`.

uncaught->handler!

clj

(uncaught->handler! handler)
Sets JVM's global `DefaultUncaughtExceptionHandler` to given
+

trace!

macro

clj

(trace! form)(trace! id form)(trace! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error run & user-opts]} form)
"Trace" signal call, focused on form + id.
+
+API: [form] [id-or-opts form] => form's result (value/throw) (unconditional)
+Default  kind: `:trace`
+Default level: `:info` (intentionally NOT `:trace`!)
+
+When conditions are met [1], creates a Telemere signal [2] and dispatches it to
+registered handlers for processing (writing to console/disk/db, etc.).
+
+Examples:
+
+  (trace! (+ 1 2))         ; %> {:kind :trace, :level :info, :run-form '(+ 1 2),
+                           ;     :run-value 3, :parent {:keys [id uid]} ...
+                           ;     :msg "(+ 1 2) => 3" ...}
+  (trace! ::my-id (+ 1 2)) ; %> {... :id ::my-id ...}
+  (trace!
+    {:let  [x "x"] ; Available to `:data` and `:msg`
+     :data {:x x}}
+
+    (+ 1 2)) ; %> {... :data {x "x"}, :msg_ "My msg: x" ...}
+
+Tips:
+
+  - Test using `with-signals`: (with-signals (trace! ...)).
+  - Supports the same options as other signals [3].
+
+  - Identical to `spy!`, but focused on form + id rather than form + level.
+
+  - Useful for debugging/monitoring forms, and tracing (nested) execution flow.
+  - Execution of `form` arg may trigger additional (nested) signals.
+    Each signal's `:parent` key will indicate its immediate parent.
+
+  - Default level is `:info`, not `:trace`! The name "trace" in "trace signal"
+    refers to the general action of tracing program flow rather than to the
+    common logging level of the same name.
+
+----------------------------------------
+[1] See `help:signal-handling` docstring
+[2] See `help:signal-content`  docstring
+[3] See `help:signal-options`  docstring

uncaught->error!

macro

clj

(uncaught->error!)(uncaught->error! id)(uncaught->error! {:as opts, :keys [elidable? location instant uid middleware sample-rate ns kind id level when rate-limit ctx parent trace? do let data msg error & user-opts]})
Uses `uncaught->handler!` so that `error!` will be called for
+uncaught JVM errors.
+
+See `uncaught->handler!` and `error!` for details.

uncaught->handler!

clj

(uncaught->handler! handler)
Sets JVM's global `DefaultUncaughtExceptionHandler` to given
   (fn handler [`<java.lang.Thread>` `<java.lang.Throwable>`]).
+
 See also `uncaught->error!`.

update-var-root!

macro

clj

added in Encore v3.68.0 (2023-09-25)

(update-var-root! var-sym update-fn)
Updates root binding (value) of the var identified by given symbol, and returns
 the new value:
   (update-var-root! my-var (fn [old-root-val] <new-root-val>)) => <new-root-val>
@@ -318,8 +635,34 @@ See `set-kind-filter!` for details.

with-min-level

macro

clj

cljs

(with-min-level min-level form)(with-min-level kind min-level form)(with-min-level kind ns-filter min-level form)
Executes form with given minimum signal call level in effect.
 See `set-min-level!` for details.

with-ns-filter

macro

clj

cljs

(with-ns-filter ns-filter form)
Executes form with given signal call namespace filter in effect.
 See `set-ns-filter!` for details.

with-out->telemere

macro

clj

(with-out->telemere form)(with-out->telemere opts form)
Executes form with `*out*` bound to flush to Telemere signals with given opts.
-

with-signal

macro

clj

(with-signal form)(with-signal {:keys [return trap-errors? stop-propagation? force-msg?]} form)
Util for tests/debugging.
-Executes given form and returns [<form-result> <last-signal-dispatched-by-form>].
-If `trap-errors?` is true, form result will be wrapped by {:keys [okay error]}.

with-streams->telemere

macro

clj

(with-streams->telemere form)(with-streams->telemere {:keys [out err], :or {out default-out-opts, err default-err-opts}} form)
Executes form with `*out*` and/or `*err*` bound to flush to Telemere signals
+

with-signal

macro

clj

(with-signal form)
Experimental
+Minimal version of `with-signals`.
+Executes given form and returns the last signal triggered by it.
+Useful for tests/debugging.
+
+- Always allows registered handlers to receive signals as usual.
+- Always traps form errors.
+- Never forces `:msg_` key.
+
+See also `with-signals` for more options.

with-signals

macro

clj

(with-signals form)(with-signals {:keys [handle? trap-errors? force-msg?], :or {handle? true}} form)
Experimental.
+Executes given form and records any signals triggered by it.
+Return value depends on given options. Useful for tests/debugging.
+
+Options:
+
+  `handle?`
+    Should registered handlers receive signals triggered by form, as usual?
+    Default: true.
+
+  `trap-errors?`
+    If  true: returns [[form-value form-error] signals], trapping any form error.
+    If false: returns [ form-value             signals], throwing on  form error.
+    Default: false.
+
+  `force-msg?`
+    Should delayed `:msg_` keys in signals be replaced with realized strings?
+    Default: false.
+
+See also `with-signal` for a simpler API.

with-streams->telemere

macro

clj

(with-streams->telemere form)(with-streams->telemere {:keys [out err], :or {out default-out-opts, err default-err-opts}} form)
Executes form with `*out*` and/or `*err*` bound to flush to Telemere signals
 with given opts.

without-filters

macro

clj

cljs

(without-filters form)
Executes form without any runtime filters.
 
\ No newline at end of file