net.lewisship.trace
Light-weight, asynchronous logging built around clojure.core/tap>
.
Follows the same pattern as clojure.core/assert
: When tracing is not compiled, the tracing macros should create no runtime overhead.
When tracing is compiled, a check occurs to see if tracing is enabled; only then do the most expensive operations (e.g., identifying the function containing the trace call) occur, as well as the call to clojure.core/tap>
.
*compile-trace*
dynamic
If false (the default), calls to trace
evaluate to nil (and trace>
and trace>>
simply return the threaded value).
*enable-trace*
dynamic
If false (the default is true) then compiled calls to trace
(and trace>
and trace>>
) are a no-op.
set-compile-trace!
(set-compile-trace! value)
Sets the default value of the *compile-trace*
var.
Remember that after changing this, it may be necessary to re-load namespaces for the change to take effect.
set-enable-trace!
(set-enable-trace! value)
Sets the default value of the *enable-trace*
var.
Changes take effect immediately.
trace
macro
(trace & kvs)
Calls to trace generate a map that is passed to tap>
.
The map includes keys:
- :in - a symbol of the namespace and function
- :line - the line number of the trace invocation (if available)
- :thread - the string name of the current thread
Additional keys and values may be supplied.
trace
expands to nil, if compilation is disabled.
Any invocation of trace evaluates to nil.
trace>
macro
(trace> value & kvs)
A version of trace
that works inside ->
thread expressions. Within the trace body, %
is bound to the threaded value. When compilation is disabled, it simply evaluates to the threaded value.
trace>>
macro
(trace>> & kvs-then-value)
A version of trace
that works inside ->>
thread expressions. Within the trace body, %
is bound to the threaded value. When compilation is disabled, it simply evaluates to the threaded value.