Liking cljdoc? Tell your friends :D

taoensso.trove

A minimal, modern logging facade for Clojure/Script. Supports both traditional and structured logging.

A minimal, modern logging facade for Clojure/Script.
Supports both traditional and structured logging.
raw docstring

*ctx*clj/s

Optional context map (state) attached to all Trove logs. Default (root) value is nil.

Useful for dynamically attaching arbitrary app-level state to logs.

Re/bind dynamic value using with-ctx, with-ctx+, or binding. Modify root (default) value using set-root-ctx!.

As with all dynamic Clojure vars, binding conveyance applies when using futures, agents, etc.

Optional context map (state) attached to all Trove logs.
Default (root) value is nil.

Useful for dynamically attaching arbitrary app-level state to logs.

Re/bind dynamic        value using `with-ctx`, `with-ctx+`, or `binding`.
Modify  root (default) value using `set-root-ctx!`.

As with all dynamic Clojure vars, binding conveyance applies when using
futures, agents, etc.
raw docstring

*log-fn*clj/s

The value of this var determines the Trove backend, i.e. what happens on trove/log! calls.

When nil, all trove/log! calls will noop. Otherwise value should be a (fn [ns coords level id payload_]) with:

ns ------- String namespace of log! callsite, e.g. "my-app.utils" coords --- ?[line column] of log! callsite, may be lost (nil) for macros wrapping log!

level ---- Keyword :level from log! call ∈ #{:trace :debug :info :warn :error :fatal :report} id ------- ?Keyword :id from log! call, e.g. :auth/login, ::order-complete, etc.

payload_ - {:keys [ctx msg data error kvs]}, MAY be wrapped with delay so access with force: :ctx --- ?Map *ctx* value at log! call time :msg --- ?String :msg from log! call :data -- ?Map :data from log! call, e.g. {:user-id 1234} :error - ?Error :error from log! call, (java.lang.Throwable, js/Error, or nil) :kvs --- ?Map of any other kvs from log! call, handy for custom log-fn opts, etc.

The configured log-fn may filter (conditionally noop), or produce the relevant logging side effects (printing, etc.).

The configured log-fn will be called SYNCHRONOUSLY so:

  • It should implement appropriate async/threading/backpressure for expensive work.
  • It has access to trove/log! calling thread/context (can be handy).
  • It has access to trove/*ctx* for filtering.

Config: Change dynamic value with binding. Change root value with set-log-fn!.

Basic fns are provided for some common backends, see taoensso.trove.x/get-log-fn with x ∈ #{console telemere timbre mulog tools-logging slf4j} (default console).

The value of this var determines the Trove backend,
i.e. what happens on `trove/log!` calls.

When `nil`, all `trove/log!` calls will noop.
Otherwise value should be a (fn [ns coords level id payload_]) with:

  `ns` ------- String namespace  of   `log!` callsite, e.g. "my-app.utils"
  `coords` --- ?[line column]    of   `log!` callsite, may be lost (nil) for macros wrapping `log!`

  `level` ----  Keyword `:level` from `log!` call ∈ #{:trace :debug :info :warn :error :fatal :report}
  `id` ------- ?Keyword `:id`    from `log!` call, e.g. `:auth/login`, `::order-complete`, etc.

  `payload_` - {:keys [ctx msg data error kvs]}, MAY be wrapped with `delay` so access with `force`:
    `:ctx` --- ?Map    `*ctx*` value at   `log!` call time
    `:msg` --- ?String `:msg`        from `log!` call
    `:data` -- ?Map    `:data`       from `log!` call, e.g. {:user-id 1234}
    `:error` - ?Error  `:error`      from `log!` call, (`java.lang.Throwable`, `js/Error`, or nil)
    `:kvs` --- ?Map of any other kvs from `log!` call, handy for custom `log-fn` opts, etc.

The configured `log-fn` may filter (conditionally noop), or produce the
relevant logging side effects (printing, etc.).

The configured `log-fn` will be called SYNCHRONOUSLY so:
  - It should implement appropriate async/threading/backpressure for expensive work.
  - It has access to `trove/log!` calling thread/context (can be handy).
  - It has access to `trove/*ctx*` for filtering.

Config:
  Change dynamic value with `binding`.
  Change root    value with `set-log-fn!`.

  Basic fns are provided for some common backends, see `taoensso.trove.x/get-log-fn`
  with x ∈ #{console telemere timbre mulog tools-logging slf4j} (default console).
raw docstring

add-ctx-bridgeclj/s

(add-ctx-bridge log-fn wrap-ctx-fn)

For custom backend (log-fn) authors that wish to support with-backend-ctx. Returns given log-fn wrapped with appropriate metadata (retain this!).

Given wrap-ctx-fn should be a (fn [ctx thunk]) -> (with-native-ctx ctx (thunk)): It will be called by with-backend-ctx when trove/*ctx* is non-empty. It should establish relevant native context, then execute and return (thunk).

For custom backend (log-fn) authors that wish to support `with-backend-ctx`.
Returns given `log-fn` wrapped with appropriate metadata (retain this!).

Given `wrap-ctx-fn` should be a (fn [ctx thunk]) -> (with-native-ctx ctx (thunk)):
  It will be called by `with-backend-ctx` when `trove/*ctx*` is non-empty.
  It should establish relevant native context, then execute and return (thunk).
raw docstring

log!clj/smacro

(log! {:keys [level id msg data error]})

Logs the given info to the currently configured backend (see *log-fn*) and returns nil.

Common options: :level -- ∈ #{:trace :debug :info :warn :error :fatal :report} (default :info) :id ----- Optional keyword used to identify event, e.g. :auth/login, ::order-complete, etc. :msg ---- Optional message string describing event (use str, format, etc. as needed) :data --- Optional arb map of structured data associated with event, e.g. {:user-id 1234} :error -- Optional platform error (java.lang.Throwable, js/Error)

Advanced options: :let ---- Bindings shared by payload args: {:keys [msg data error kvs]} :ns ----- Custom namespace string to override default :coords - Custom [line column] to override default :ctx ---- Custom context map to override default (*ctx*) :ctx+ --- Update for call-time *ctx*: map to merge or unary fn, trumps :ctx :log-fn - Custom log-fn to override default (*log-fn*) <kvs> ----- Any other kvs will also be provided to log-fn, handy for custom log-fn opts, etc.

Traditional logs typically include at least {:keys [level msg ...]}. Structured logs typically include at least {:keys [level id data ...]}.

Logs the given info to the currently configured backend (see `*log-fn*`)
and returns nil.

Common options:
  `:level` -- ∈ #{:trace :debug :info :warn :error :fatal :report} (default `:info`)
  `:id` ----- Optional keyword used to identify event, e.g. `:auth/login`, `::order-complete`, etc.
  `:msg` ---- Optional message string describing event (use `str`, `format`, etc. as needed)
  `:data` --- Optional arb map of structured data associated with event, e.g. {:user-id 1234}
  `:error` -- Optional platform error (`java.lang.Throwable`, `js/Error`)

Advanced options:
  `:let` ---- Bindings shared by payload args: {:keys [msg data error kvs]}
  `:ns` ----- Custom namespace string to override default
  `:coords` - Custom [line column]    to override default
  `:ctx` ---- Custom context map      to override default (`*ctx*`)
  `:ctx+` --- Update for `call-time *ctx*`: map to merge or unary fn, trumps `:ctx`
  `:log-fn` - Custom `log-fn`         to override default (`*log-fn*`)
  <kvs> ----- Any other kvs will also be provided to `log-fn`, handy for
              custom `log-fn` opts, etc.

Traditional logs typically include at least {:keys [level msg ...]}.
Structured  logs typically include at least {:keys [level id data ...]}.
raw docstring

set-log-fn!clj/smacro

(set-log-fn! f)

Sets the root value of *log-fn* (see its docstring for more info).

Sets the root value of `*log-fn*` (see its docstring for more info).
raw docstring

set-root-ctx!clj/smacro

(set-root-ctx! root-ctx)

Sets the root value of *ctx* (see its docstring for more info).

Sets the root value of `*ctx*` (see its docstring for more info).
raw docstring

with-backend-ctxclj/smacro

(with-backend-ctx & body)

Evals given body and returns its result.

When *log-fn* opts in [1], merges Trove's *ctx* over backend's own native context for the body's scope.

[1] See :bridge-ctx? opt for built-in log-fn constructors. Custom backend authors see add-ctx-bridge.

Evals given body and returns its result.

When `*log-fn*` opts in [1], merges Trove's `*ctx*` over backend's
own native context for the body's scope.

[1] See `:bridge-ctx?` opt for built-in log-fn constructors.
    Custom backend authors see `add-ctx-bridge`.
raw docstring

with-ctxclj/smacro

(with-ctx ctx & body)

Evaluates given body with given ?map *ctx* value. See *ctx* for details.

Evaluates given body with given ?map `*ctx*` value. See `*ctx*` for details.
raw docstring

with-ctx+clj/smacro

(with-ctx+ update-map-or-fn & body)

Evaluates given body 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, returning ?map

See *ctx* for details.

Evaluates given body 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, returning ?map

See `*ctx*` for details.
raw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close