mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-16 17:41:12 +00:00
[mod] Signal options: drop :location, add :coords
This is the input-side change related to [1], and only
affects folks who've been providing custom callsite info to
Telemere signals (usually in the context of wrapper macros).
To provide custom callsite info BEFORE this commit:
(tel/signal! {:location {:ns "my-ns", :line 10, :column 20}})
To provide custom callsite info AFTER this commit:
(tel/signal! {:ns "my-ns", :coords [10 20]})
Motivation for the new override API:
- It's shorter and cleaner.
- It's less likely to cause confusion since it avoids the
redundant signal keys (signals previously contained callsite
info in 2 duplicate places).
- The underlying implementation is simpler.
- The util for manually getting coords is easier to use and doesn't
require macro-time environment info, making it easier for folks
to write wrapper macros that include line + column info.
- When embedded, the new callsite info is shorter and easier for
Cljs advanced compilation to de-duplicate (so helps reduce .js
build size).
[1] Commit 1f99f7186b
This commit is contained in:
parent
1f99f7186b
commit
fda22ce80c
10 changed files with 141 additions and 129 deletions
|
|
@ -10,8 +10,7 @@
|
|||
:scm {:name "git" :url "https://github.com/taoensso/telemere"}
|
||||
|
||||
:dependencies
|
||||
[[com.taoensso/truss "2.0.0-SNAPSHOT"]
|
||||
[com.taoensso/encore "3.132.0"]]
|
||||
[[com.taoensso/encore "3.135.0-SNAPSHOT"]]
|
||||
|
||||
:test-paths ["test" #_"src"]
|
||||
|
||||
|
|
|
|||
|
|
@ -18,10 +18,12 @@ All options are available for all signal creators:
|
|||
|
||||
`:parent` ------ Custom ?{:keys [id uid]} to override auto (dynamic) parent signal tracing info
|
||||
`:root` -------- Custom ?{:keys [id uid]} to override auto (dynamic) root signal tracing info
|
||||
`:location` ---- Custom ?{:keys [ns line column file]} to override auto signal creator callsite location
|
||||
`:ctx` --------- Custom ?val to override auto (dynamic `*ctx*`) in signal, as per `with-ctx`
|
||||
`:ctx+` -------- Custom ?val to update auto (dynamic `*ctx*`) in signal, as per `with-ctx+`
|
||||
|
||||
`:ns` ---------- Custom ?str namespace to override auto signal creator callsite
|
||||
`:coords` ------ Custom ?[line column] to override auto signal creator callsite
|
||||
|
||||
`:elidable?` --- Should signal be subject to compile-time elision? (Default: true)
|
||||
`:sample-rate` - ?rate ∈ℝ[0,1] for signal sampling (0.75 => allow 75% of signals, nil => allow all)
|
||||
`:when` -------- Arb ?form; when present, form must return truthy to allow signal
|
||||
|
|
|
|||
|
|
@ -31,15 +31,15 @@
|
|||
(remove-ns (symbol (str *ns*)))
|
||||
(:api (enc/interns-overview)))
|
||||
|
||||
(enc/assert-min-encore-version [3 132 0])
|
||||
(enc/assert-min-encore-version [3 135 0])
|
||||
|
||||
;;;; Shared signal API
|
||||
|
||||
(sigs/def-api
|
||||
{:sf-arity 4
|
||||
:ct-sig-filter impl/ct-sig-filter
|
||||
:*rt-sig-filter* impl/*rt-sig-filter*
|
||||
:*sig-handlers* impl/*sig-handlers*
|
||||
:ct-call-filter impl/ct-call-filter
|
||||
:*rt-call-filter* impl/*rt-call-filter*
|
||||
:*sig-handlers* impl/*sig-handlers*
|
||||
:lib-dispatch-opts
|
||||
(assoc sigs/default-handler-dispatch-opts
|
||||
:convey-bindings? false ; Handled manually
|
||||
|
|
@ -209,8 +209,8 @@
|
|||
;; - uncaught->error! - ?id => nil
|
||||
|
||||
#?(:clj
|
||||
(defn- merge-or-assoc-opts [m &form &env k v]
|
||||
(let [m (assoc m :location* (enc/get-source &form &env))]
|
||||
(defn- merge-or-assoc-opts [m macro-form k v]
|
||||
(let [m (assoc m :coords (truss/callsite-coords macro-form))]
|
||||
(if (map? v)
|
||||
(merge m v)
|
||||
(assoc m k v)))))
|
||||
|
|
@ -221,8 +221,8 @@
|
|||
"id + ?level => allowed? Note unique arg order: [x opts] rather than [opts x]!"
|
||||
{:doc (impl/signal-docstring :event!)
|
||||
:arglists (impl/signal-arglists :event!)}
|
||||
([ opts-or-id] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :id opts-or-id)))
|
||||
([id opts-or-level] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :id id))))))
|
||||
([ opts-or-id] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :id opts-or-id)))
|
||||
([id opts-or-level] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :id id))))))
|
||||
|
||||
(comment (with-signal (event! ::my-id :info)))
|
||||
|
||||
|
|
@ -232,8 +232,8 @@
|
|||
"?level + msg => allowed?"
|
||||
{:doc (impl/signal-docstring :log!)
|
||||
:arglists (impl/signal-arglists :log!)}
|
||||
([opts-or-msg ] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :msg opts-or-msg)))
|
||||
([opts-or-level msg] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :msg msg))))))
|
||||
([opts-or-msg ] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :msg opts-or-msg)))
|
||||
([opts-or-level msg] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :msg msg))))))
|
||||
|
||||
(comment (with-signal (log! :info "My msg")))
|
||||
|
||||
|
|
@ -243,8 +243,8 @@
|
|||
"?id + run => unconditional run result (value or throw)."
|
||||
{:doc (impl/signal-docstring :trace!)
|
||||
:arglists (impl/signal-arglists :trace!)}
|
||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :run opts-or-run)))
|
||||
([opts-or-id run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :run run))))))
|
||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :run opts-or-run)))
|
||||
([opts-or-id run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :run run))))))
|
||||
|
||||
(comment (with-signal (trace! ::my-id (+ 1 2))))
|
||||
|
||||
|
|
@ -254,8 +254,8 @@
|
|||
"?level + run => unconditional run result (value or throw)."
|
||||
{:doc (impl/signal-docstring :spy!)
|
||||
:arglists (impl/signal-arglists :spy!)}
|
||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form &env :run opts-or-run)))
|
||||
([opts-or-level run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form &env :level opts-or-level) :run run))))))
|
||||
([opts-or-run] `(impl/signal! ~(merge-or-assoc-opts base-opts &form :run opts-or-run)))
|
||||
([opts-or-level run] `(impl/signal! ~(assoc (merge-or-assoc-opts base-opts &form :level opts-or-level) :run run))))))
|
||||
|
||||
(comment (with-signals (spy! :info (+ 1 2))))
|
||||
|
||||
|
|
@ -265,9 +265,9 @@
|
|||
"?id + error => unconditional given error."
|
||||
{:doc (impl/signal-docstring :error!)
|
||||
:arglists (impl/signal-arglists :error!)}
|
||||
([opts-or-id error] `(error! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :error error)))
|
||||
([opts-or-id error] `(error! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :error error)))
|
||||
([opts-or-error]
|
||||
(let [opts (merge-or-assoc-opts base-opts &form &env :error opts-or-error)
|
||||
(let [opts (merge-or-assoc-opts base-opts &form :error opts-or-error)
|
||||
gs-error (gensym "error")]
|
||||
`(let [~gs-error ~(get opts :error)]
|
||||
(impl/signal! ~(assoc opts :error gs-error))
|
||||
|
|
@ -281,9 +281,9 @@
|
|||
"?id + run => unconditional run value or ?catch-val."
|
||||
{:doc (impl/signal-docstring :catch->error!)
|
||||
:arglists (impl/signal-arglists :catch->error!)}
|
||||
([opts-or-id run] `(catch->error! ~(assoc (merge-or-assoc-opts base-opts &form &env :id opts-or-id) :run run)))
|
||||
([opts-or-id run] `(catch->error! ~(assoc (merge-or-assoc-opts base-opts &form :id opts-or-id) :run run)))
|
||||
([opts-or-run]
|
||||
(let [opts (merge-or-assoc-opts base-opts &form &env :run opts-or-run)
|
||||
(let [opts (merge-or-assoc-opts base-opts &form :run opts-or-run)
|
||||
rethrow? (not (contains? opts :catch-val))
|
||||
catch-val (get opts :catch-val)
|
||||
run-form (get opts :run)
|
||||
|
|
@ -325,7 +325,7 @@
|
|||
{:arglists (impl/signal-arglists :uncaught->error!)}
|
||||
([ ] (enc/keep-callsite `(uncaught->error! {})))
|
||||
([opts-or-id]
|
||||
(let [opts (merge-or-assoc-opts base-opts &form &env :id opts-or-id)]
|
||||
(let [opts (merge-or-assoc-opts base-opts &form :id opts-or-id)]
|
||||
`(uncaught->handler!
|
||||
(fn [~'__thread-arg ~'__throwable-arg]
|
||||
(impl/signal! ~opts))))))))
|
||||
|
|
@ -381,23 +381,23 @@
|
|||
(enc/set-var-root! sigs/*default-handler-error-fn*
|
||||
(fn [{:keys [error] :as m}]
|
||||
(impl/signal!
|
||||
{:kind :error
|
||||
:level :error
|
||||
:error error
|
||||
:location {:ns "taoensso.encore.signals"}
|
||||
:id :taoensso.encore.signals/handler-error
|
||||
:msg "Error executing wrapped handler fn"
|
||||
:data (dissoc m :error)})))
|
||||
{:kind :error
|
||||
:level :error
|
||||
:error error
|
||||
:ns "taoensso.encore.signals"
|
||||
:id :taoensso.encore.signals/handler-error
|
||||
:msg "Error executing wrapped handler fn"
|
||||
:data (dissoc m :error)})))
|
||||
|
||||
(enc/set-var-root! sigs/*default-handler-backp-fn*
|
||||
(fn [data]
|
||||
(impl/signal!
|
||||
{:kind :event
|
||||
:level :warn
|
||||
:location {:ns "taoensso.encore.signals"}
|
||||
:id :taoensso.encore.signals/handler-back-pressure
|
||||
:msg "Back pressure on wrapped handler fn"
|
||||
:data data})))
|
||||
{:kind :event
|
||||
:level :warn
|
||||
:ns "taoensso.encore.signals"
|
||||
:id :taoensso.encore.signals/handler-back-pressure
|
||||
:msg "Back pressure on wrapped handler fn"
|
||||
:data data})))
|
||||
|
||||
(add-handler! :default/console (handler:console))
|
||||
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@
|
|||
id-filter (enc/get-env {:as :edn} :taoensso.telemere/ct-id-filter<.platform><.edn>)
|
||||
min-level (enc/get-env {:as :edn} :taoensso.telemere/ct-min-level<.platform><.edn>)]
|
||||
|
||||
(enc/defonce ct-sig-filter
|
||||
"`SigFilter` used for compile-time elision, or nil."
|
||||
(sigs/sig-filter
|
||||
(enc/defonce ct-call-filter
|
||||
"`SpecFilter` used for compile-time elision, or nil."
|
||||
(sigs/spec-filter
|
||||
{:kind-filter (or kind-filter (get base :kind-filter))
|
||||
:ns-filter (or ns-filter (get base :ns-filter))
|
||||
:id-filter (or id-filter (get base :id-filter))
|
||||
|
|
@ -66,9 +66,9 @@
|
|||
id-filter (enc/get-env {:as :edn} :taoensso.telemere/rt-id-filter<.platform><.edn>)
|
||||
min-level (enc/get-env {:as :edn, :default :info} :taoensso.telemere/rt-min-level<.platform><.edn>)]
|
||||
|
||||
(enc/defonce ^:dynamic *rt-sig-filter*
|
||||
"`SigFilter` used for runtime filtering, or nil."
|
||||
(sigs/sig-filter
|
||||
(enc/defonce ^:dynamic *rt-call-filter*
|
||||
"`SpecFilter` used for runtime filtering, or nil."
|
||||
(sigs/spec-filter
|
||||
{:kind-filter (or kind-filter (get base :kind-filter))
|
||||
:ns-filter (or ns-filter (get base :ns-filter))
|
||||
:id-filter (or id-filter (get base :id-filter))
|
||||
|
|
@ -276,11 +276,9 @@
|
|||
(pr-str (assoc (MyRec. :x) :y :y)))))
|
||||
|
||||
(deftype #_defrecord WrappedSignal
|
||||
;; Internal type to implement `sigs/IFilterableSignal`,
|
||||
;; incl. lazy + cached `signal-value_` field.
|
||||
[kind ns id level signal-value_]
|
||||
sigs/IFilterableSignal
|
||||
(allow-signal? [_ sig-filter] (sig-filter kind ns id level))
|
||||
sigs/ISignalHandling
|
||||
(allow-signal? [_ spec-filter] (spec-filter kind ns id level))
|
||||
(signal-debug [_] {:kind kind, :ns ns, :id id, :level level})
|
||||
(signal-value [_ handler-sample-rate]
|
||||
(sigs/signal-with-combined-sample-rate handler-sample-rate
|
||||
|
|
@ -396,16 +394,16 @@
|
|||
:signal! ; opts => allowed? / unconditional run result (value or throw)
|
||||
'( [& opts-kvs]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id, ; Undocumented
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}])
|
||||
|
||||
:signal-allowed? ; opts => allowed?
|
||||
'( [& opts-kvs]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id, ; Undocumented
|
||||
elidable? location #_location* #_inst #_uid #_middleware #_middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id, ; Undocumented
|
||||
elidable? coords #_inst #_uid #_middleware #_middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
#_ctx #_ctx+ #_parent #_root #_trace?, #_do #_let #_data #_msg #_error #_run #_& #_kvs]}])
|
||||
|
||||
|
|
@ -414,8 +412,8 @@
|
|||
[id level]
|
||||
[id
|
||||
{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
||||
|
||||
|
|
@ -423,8 +421,8 @@
|
|||
'([opts-or-msg]
|
||||
[level msg]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||
msg])
|
||||
|
|
@ -433,8 +431,8 @@
|
|||
'([opts-or-run]
|
||||
[id run]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
||||
run])
|
||||
|
|
@ -443,8 +441,8 @@
|
|||
'([opts-or-run]
|
||||
[level run]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error run & kvs]}
|
||||
run])
|
||||
|
|
@ -453,8 +451,8 @@
|
|||
'([opts-or-error]
|
||||
[id error]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||
error])
|
||||
|
|
@ -463,8 +461,8 @@
|
|||
'([opts-or-run]
|
||||
[id run]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id, catch-val,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id, catch-val,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}
|
||||
run])
|
||||
|
|
@ -473,8 +471,8 @@
|
|||
'([]
|
||||
[opts-or-id]
|
||||
[{:as opts-map :keys
|
||||
[#_defaults #_elide? #_allow? #_expansion-id,
|
||||
elidable? location #_location* inst uid middleware middleware+,
|
||||
[#_defaults #_elide? #_allow? #_callsite-id,
|
||||
elidable? coords inst uid middleware middleware+,
|
||||
sample-rate kind ns id level when rate-limit rate-limit-by,
|
||||
ctx ctx+ parent root trace?, do let data msg error #_run & kvs]}])
|
||||
|
||||
|
|
@ -524,6 +522,9 @@
|
|||
clj? (not cljs?)
|
||||
{run-form :run} opts
|
||||
|
||||
ns-form* (get opts :ns :auto)
|
||||
ns-form (auto-> ns-form* (str *ns*))
|
||||
|
||||
show-run-val (get opts :run-val '_run-val)
|
||||
show-run-form
|
||||
(when run-form
|
||||
|
|
@ -535,15 +536,16 @@
|
|||
(list (first run-form) '...)
|
||||
(do run-form))))
|
||||
|
||||
{:keys [#_expansion-id location elide? allow?]}
|
||||
(sigs/filterable-expansion
|
||||
{:sf-arity 4
|
||||
:ct-sig-filter ct-sig-filter
|
||||
:*rt-sig-filter* `*rt-sig-filter*}
|
||||
{:keys [#_callsite-id elide? allow?]}
|
||||
(sigs/filter-call
|
||||
{:cljs? cljs?
|
||||
:sf-arity 4
|
||||
:ct-call-filter ct-call-filter
|
||||
:*rt-call-filter* `*rt-call-filter*}
|
||||
|
||||
(assoc opts
|
||||
:location* (get opts :location* (enc/get-source &form &env))
|
||||
:bound-forms
|
||||
:ns ns-form
|
||||
:local-forms
|
||||
{:kind '__kind
|
||||
:ns '__ns
|
||||
:id '__id
|
||||
|
|
@ -551,12 +553,11 @@
|
|||
|
||||
(if elide?
|
||||
run-form
|
||||
(let [{ns-form :ns
|
||||
line-form :line
|
||||
column-form :column
|
||||
file-form :file} location
|
||||
|
||||
coords (when line-form [line-form column-form])
|
||||
(let [coords
|
||||
(get opts :coords
|
||||
(when (= ns-form* :auto)
|
||||
;; Auto coords iff auto ns
|
||||
(truss/callsite-coords &form)))
|
||||
|
||||
{inst-form :inst
|
||||
level-form :level
|
||||
|
|
@ -605,10 +606,10 @@
|
|||
kvs-form
|
||||
(not-empty
|
||||
(dissoc opts
|
||||
:elidable? :location :location* :inst :uid :middleware :middleware+,
|
||||
:elidable? :coords :inst :uid :middleware :middleware+,
|
||||
:sample-rate :ns :kind :id :level :filter :when #_:rate-limit #_:rate-limit-by,
|
||||
:ctx :ctx+ :parent #_:trace?, :do :let :data :msg :error,
|
||||
:run :run-form :run-val, :elide? :allow? #_:expansion-id :otel/context))
|
||||
:run :run-form :run-val, :elide? :allow? #_:callsite-id :otel/context))
|
||||
|
||||
_ ; Compile-time validation
|
||||
(do
|
||||
|
|
@ -616,7 +617,8 @@
|
|||
(truss/ex-info! "Signals cannot have both `:run` and `:error` opts at the same time"
|
||||
{:run-form run-form
|
||||
:error-form error-form
|
||||
:location location
|
||||
:ns ns-form
|
||||
:coords coords
|
||||
:other-opts (dissoc opts :run :error)}))
|
||||
|
||||
(when-let [e (find opts :msg_)] ; Common typo/confusion
|
||||
|
|
@ -782,13 +784,14 @@
|
|||
defaults (get opts :defaults)
|
||||
opts (merge defaults (dissoc opts :defaults))
|
||||
|
||||
{:keys [#_expansion-id #_location elide? allow?]}
|
||||
(sigs/filterable-expansion
|
||||
{:sf-arity 4
|
||||
:ct-sig-filter ct-sig-filter
|
||||
:*rt-sig-filter* `*rt-sig-filter*}
|
||||
(assoc opts :location*
|
||||
(get opts :location* (enc/get-source &form &env))))]
|
||||
{:keys [#_callsite-id elide? allow?]}
|
||||
(sigs/filter-call
|
||||
{:cljs? (boolean (:ns &env))
|
||||
:sf-arity 4
|
||||
:ct-call-filter ct-call-filter
|
||||
:*rt-call-filter* `*rt-call-filter*}
|
||||
(assoc opts :ns
|
||||
(get opts :ns (str *ns*))))]
|
||||
|
||||
(if elide? false `(if ~allow? true false)))))
|
||||
|
||||
|
|
@ -825,7 +828,7 @@
|
|||
(defn test-interop! [msg test-fn]
|
||||
(let [msg (str "Interop test: " msg " (" (enc/uuid-str) ")")
|
||||
signal
|
||||
(binding [*rt-sig-filter* nil] ; Without runtime filters
|
||||
(binding [*rt-call-filter* nil] ; Without runtime filters
|
||||
(with-signal :raw :trap (test-fn msg)))]
|
||||
|
||||
(= (force (get signal :msg_)) msg)))))
|
||||
|
|
|
|||
|
|
@ -35,12 +35,11 @@
|
|||
*err* (or prev-*err* orig-*err*)]
|
||||
|
||||
(impl/signal!
|
||||
{:location nil
|
||||
:ns nil
|
||||
:kind kind
|
||||
:level level
|
||||
:id id
|
||||
:msg msg})))))))]
|
||||
{:ns nil
|
||||
:kind kind
|
||||
:level level
|
||||
:id id
|
||||
:msg msg})))))))]
|
||||
|
||||
(java.io.PrintStream. baos true ; Auto flush
|
||||
java.nio.charset.StandardCharsets/UTF_8)))
|
||||
|
|
|
|||
|
|
@ -118,21 +118,24 @@
|
|||
([ form] (enc/keep-callsite `(spy :debug nil ~form)))
|
||||
([level form] (enc/keep-callsite `(spy ~level nil ~form)))
|
||||
([level form-name form]
|
||||
(let [location* (enc/get-source &form &env)
|
||||
(let [ns (str *ns*)
|
||||
coords (truss/callsite-coords &form)
|
||||
msg
|
||||
(if form-name
|
||||
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg ~form-name value# error# nsecs#))
|
||||
`(fn [_form# value# error# nsecs#] (impl/default-trace-msg '~form value# error# nsecs#)))]
|
||||
|
||||
`(tel/spy!
|
||||
{:location* ~location*
|
||||
:id shim-id
|
||||
:level ~level
|
||||
:msg ~msg}
|
||||
{:ns ~ns
|
||||
:coords ~coords
|
||||
:id shim-id
|
||||
:level ~level
|
||||
:msg ~msg}
|
||||
|
||||
(tel/catch->error!
|
||||
{:location* ~location*
|
||||
:id shim-id}
|
||||
{:ns ~ns
|
||||
:coords ~coords
|
||||
:id shim-id}
|
||||
~form))))))
|
||||
|
||||
(comment
|
||||
|
|
|
|||
|
|
@ -21,19 +21,19 @@
|
|||
(enabled? [_ level]
|
||||
(when-debug (println [:tools-logging/enabled? level logger-name]))
|
||||
(impl/signal-allowed?
|
||||
{:location {:ns logger-name}
|
||||
:kind :tools-logging
|
||||
:level level}))
|
||||
{:ns logger-name
|
||||
:kind :tools-logging
|
||||
:level level}))
|
||||
|
||||
(write! [_ level throwable message]
|
||||
(when-debug (println [:tools-logging/write! level logger-name]))
|
||||
(impl/signal!
|
||||
{:allow? true ; Pre-filtered by `enabled?` call
|
||||
:location {:ns logger-name}
|
||||
:kind :tools-logging
|
||||
:level level
|
||||
:error throwable
|
||||
:msg message})
|
||||
{:allow? true ; Pre-filtered by `enabled?` call
|
||||
:ns logger-name
|
||||
:kind :tools-logging
|
||||
:level level
|
||||
:error throwable
|
||||
:msg message})
|
||||
nil))
|
||||
|
||||
(deftype TelemereLoggerFactory []
|
||||
|
|
|
|||
|
|
@ -602,11 +602,11 @@
|
|||
(when (and parent (not= parent root)) (af " parent: " (vf (format-parent ns parent)))) ; {:keys [id uid]}
|
||||
(when root (af " root: " (vf (format-parent ns root)))) ; {:keys [id uid]}
|
||||
|
||||
#?(:clj (when (enc/and* host incl-host?) (af " host: " (vf host)))) ; {:keys [ name ip]}
|
||||
#?(:clj (when (enc/and* thread incl-thread?) (af " thread: " (vf thread)))) ; {:keys [group name id]}
|
||||
#?(:clj (when (enc/and? host incl-host?) (af " host: " (vf host)))) ; {:keys [ name ip]}
|
||||
#?(:clj (when (enc/and? thread incl-thread?) (af " thread: " (vf thread)))) ; {:keys [group name id]}
|
||||
(when (enc/not-empty-coll data) (af " data: " (vf data)))
|
||||
(when (enc/not-empty-coll ctx) (af " ctx: " (vf ctx)))
|
||||
(when (enc/and* kvs incl-kvs?) (af " kvs: " (vf kvs))))
|
||||
(when (enc/and? kvs incl-kvs?) (af " kvs: " (vf kvs))))
|
||||
|
||||
(let [{:keys [run-form error]} signal]
|
||||
(when run-form
|
||||
|
|
|
|||
|
|
@ -40,22 +40,22 @@
|
|||
(defn ex1! [] (throw ex1))
|
||||
(defn ex1? [x] (= (truss/ex-root x) ex1)))
|
||||
|
||||
(let [rt-sig-filter_ (atom nil)
|
||||
sig-handlers_ (atom nil)]
|
||||
(let [rt-call-filter_ (atom nil)
|
||||
sig-handlers_ (atom nil)]
|
||||
|
||||
(test/use-fixtures :once
|
||||
(enc/test-fixtures
|
||||
{:before
|
||||
(fn []
|
||||
(reset! rt-sig-filter_ impl/*rt-sig-filter*)
|
||||
(reset! sig-handlers_ impl/*sig-handlers*)
|
||||
(enc/set-var-root! impl/*sig-handlers* nil)
|
||||
(enc/set-var-root! impl/*rt-sig-filter* nil))
|
||||
(reset! rt-call-filter_ impl/*rt-call-filter*)
|
||||
(reset! sig-handlers_ impl/*sig-handlers*)
|
||||
(enc/set-var-root! impl/*sig-handlers* nil)
|
||||
(enc/set-var-root! impl/*rt-call-filter* nil))
|
||||
|
||||
:after
|
||||
(fn []
|
||||
(enc/set-var-root! impl/*rt-sig-filter* @rt-sig-filter_)
|
||||
(enc/set-var-root! impl/*sig-handlers* @sig-handlers_))})))
|
||||
(enc/set-var-root! impl/*rt-call-filter* @rt-call-filter_)
|
||||
(enc/set-var-root! impl/*sig-handlers* @sig-handlers_))})))
|
||||
|
||||
;;;;
|
||||
|
||||
|
|
@ -125,6 +125,12 @@
|
|||
(is (> (inst-ms end) (inst-ms start)) "End instant is start + run-nsecs")
|
||||
(is (< (inst-ms end) 1e6) "End instant is start + run-nsecs")])]))
|
||||
|
||||
(testing "Callsite overrides"
|
||||
[(is (sm? (with-sig (sig! { })) {:ns "taoensso.telemere-tests", :coords coords?}))
|
||||
(is (sm? (with-sig (sig! {:ns "custom-ns" })) {:ns "custom-ns", :coords nil}) "Custom ns clears coords")
|
||||
(is (sm? (with-sig (sig! { :coords [1 2]})) {:ns "taoensso.telemere-tests", :coords [1 2]}) "Custom coords")
|
||||
(is (sm? (with-sig (sig! {:ns "custom-ns", :coords [1 2]})) {:ns "custom-ns", :coords [1 2]}) "Custom ns + coords")])
|
||||
|
||||
(testing "Support arb extra user kvs"
|
||||
(let [sv (with-sig (sig! {:level :info, :my-k1 "v1", :my-k2 "v2"}))]
|
||||
(is (sm? sv {:level :info, :my-k1 "v1", :my-k2 "v2"
|
||||
|
|
|
|||
|
|
@ -108,20 +108,20 @@
|
|||
[logger-name level]
|
||||
(when-debug (println [:slf4j/allowed? (sig-level level) logger-name]))
|
||||
(impl/signal-allowed?
|
||||
{:location {:ns logger-name} ; Typically source class name
|
||||
:kind :slf4j
|
||||
:level (sig-level level)}))
|
||||
{:ns logger-name ; Typically source class name
|
||||
:kind :slf4j
|
||||
:level (sig-level level)}))
|
||||
|
||||
(defn- normalized-log!
|
||||
[logger-name level inst error msg-pattern args marker-names kvs]
|
||||
(when-debug (println [:slf4j/normalized-log! (sig-level level) logger-name]))
|
||||
(impl/signal!
|
||||
{:allow? true ; Pre-filtered by `allowed?` call
|
||||
:location {:ns logger-name} ; Typically source class name
|
||||
:kind :slf4j
|
||||
:level (sig-level level)
|
||||
:inst inst
|
||||
:error error
|
||||
{:allow? true ; Pre-filtered by `allowed?` call
|
||||
:ns logger-name ; Typically source class name
|
||||
:kind :slf4j
|
||||
:level (sig-level level)
|
||||
:inst inst
|
||||
:error error
|
||||
|
||||
:ctx
|
||||
(when-let [hmap (org.slf4j.MDC/getCopyOfContextMap)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue