mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 09:51:12 +00:00
[mod] SLF4J->Telemere backend: move noisy stuff out of signal data
This is a BREAKING change for the small minority of users that:
1. Are using the `taoensso.telemere.slf4j` backend, AND
2. Are using the low-level `:slf4j/args` or `:slf4j/marker-names`
values in signal `:data`
BEFORE this commit:
SLF4J signals contain:
{:data {:slf4j/kvs {...},
:slf4j/args [...],
:slf4j/marker-names #{...}},
...}.
AFTER this commit:
SLF4J signals contain:
{:data {:slf4j/kvs {...}},
:kvs {:slf4j/args <Object[]>,
:slf4j/markers #{...}},
...}
So:
- [:data :slf4j/marker-names] has moved to [:kvs :slf4j/markers].
- [:data :slf4j/args] has moved to [:kvs :slf4j/args],
and is now an Object[] rather than vector.
Motivation for the change:
The new behaviour is a more sensible default.
Basically: anything in `:data` is included by default in output.
But :slf4j/args are generally anyway already in the signal's formatted
message, so this ends up just creating duplicate output.
Likewise markers are generally used more for filtering/xfns than for
output labelling, so excluding them from default output is sensible.
This commit is contained in:
parent
cc680b06f5
commit
e6ce33dd4e
2 changed files with 30 additions and 31 deletions
|
|
@ -727,7 +727,7 @@
|
||||||
(is (sm? (with-sig (-> (.atWarn sl) (.log "Hello"))) {:level :warn, :ns "my.class", :kind :slf4j, :msg_ "Hello", :inst enc/inst?}) "Fluent API: warn basics")])
|
(is (sm? (with-sig (-> (.atWarn sl) (.log "Hello"))) {:level :warn, :ns "my.class", :kind :slf4j, :msg_ "Hello", :inst enc/inst?}) "Fluent API: warn basics")])
|
||||||
|
|
||||||
(testing "Message formatting"
|
(testing "Message formatting"
|
||||||
(let [msgp "x={},y={}", expected {:msg_ "x=1,y=2", :data {:slf4j/args ["1" "2"]}}]
|
(let [msgp "x={},y={}", expected {:msg_ "x=1,y=2", :slf4j/args (fn [objs] (= (vec objs) ["1" "2"]))}]
|
||||||
[(is (sm? (with-sig (.info sl msgp "1" "2")) expected) "Legacy API: formatted message, raw args")
|
[(is (sm? (with-sig (.info sl msgp "1" "2")) expected) "Legacy API: formatted message, raw args")
|
||||||
(is (sm? (with-sig (-> (.atInfo sl) (.setMessage msgp) (.addArgument "1") (.addArgument "2") (.log))) expected) "Fluent API: formatted message, raw args")]))
|
(is (sm? (with-sig (-> (.atInfo sl) (.setMessage msgp) (.addArgument "1") (.addArgument "2") (.log))) expected) "Fluent API: formatted message, raw args")]))
|
||||||
|
|
||||||
|
|
@ -738,8 +738,8 @@
|
||||||
m2 (#'slf4j/est-marker! "M2")
|
m2 (#'slf4j/est-marker! "M2")
|
||||||
cm (#'slf4j/est-marker! "Compound" "M1" "M2")]
|
cm (#'slf4j/est-marker! "Compound" "M1" "M2")]
|
||||||
|
|
||||||
[(is (sm? (with-sig (.info sl cm "Hello")) {:data {:slf4j/marker-names #{"Compound" "M1" "M2"}}}) "Legacy API: markers")
|
[(is (sm? (with-sig (.info sl cm "Hello")) {:slf4j/markers #{"Compound" "M1" "M2"}}) "Legacy API: markers")
|
||||||
(is (sm? (with-sig (-> (.atInfo sl) (.addMarker m1) (.addMarker cm) (.log))) {:data {:slf4j/marker-names #{"Compound" "M1" "M2"}}}) "Fluent API: markers")]))
|
(is (sm? (with-sig (-> (.atInfo sl) (.addMarker m1) (.addMarker cm) (.log))) {:slf4j/markers #{"Compound" "M1" "M2"}}) "Fluent API: markers")]))
|
||||||
|
|
||||||
(testing "Errors"
|
(testing "Errors"
|
||||||
[(is (sm? (with-sig (.warn sl "An error" ^Throwable ex1)) {:level :warn, :error ex1}) "Legacy API: errors")
|
[(is (sm? (with-sig (.warn sl "An error" ^Throwable ex1)) {:level :warn, :error ex1}) "Legacy API: errors")
|
||||||
|
|
|
||||||
|
|
@ -63,13 +63,13 @@
|
||||||
|
|
||||||
(comment [(est-marker! "a1" "a2") (get-marker "a1") (= (get-marker "a1") (get-marker "a1"))])
|
(comment [(est-marker! "a1" "a2") (get-marker "a1") (= (get-marker "a1") (get-marker "a1"))])
|
||||||
|
|
||||||
(def ^:private marker-names
|
(def ^:private get-marker-names
|
||||||
"Returns #{<MarkerName>}. Cached => assumes markers NOT modified after creation."
|
"Returns #{<MarkerName>}. Cached => assumes markers NOT modified after creation."
|
||||||
;; We use `BasicMarkerFactory` so:
|
;; We use `BasicMarkerFactory` so:
|
||||||
;; 1. Our markers are just labels (no other content besides their name).
|
;; 1. Our markers are just labels (no other content besides their name).
|
||||||
;; 2. Markers with the same name are identical (enabling caching).
|
;; 2. Markers with the same name are identical (enabling caching).
|
||||||
(enc/fmemoize
|
(enc/fmemoize
|
||||||
(fn marker-names [marker-or-markers]
|
(fn get-marker-names [marker-or-markers]
|
||||||
(if (instance? org.slf4j.Marker marker-or-markers)
|
(if (instance? org.slf4j.Marker marker-or-markers)
|
||||||
|
|
||||||
;; Single marker
|
;; Single marker
|
||||||
|
|
@ -82,12 +82,12 @@
|
||||||
(fn [acc ^org.slf4j.Marker in]
|
(fn [acc ^org.slf4j.Marker in]
|
||||||
(if-not (.hasReferences in)
|
(if-not (.hasReferences in)
|
||||||
(conj acc (.getName in))
|
(conj acc (.getName in))
|
||||||
(into acc (marker-names in))))
|
(into acc (get-marker-names in))))
|
||||||
acc (.iterator m))))
|
acc (.iterator m))))
|
||||||
|
|
||||||
;; Vector of markers
|
;; Vector of markers
|
||||||
(reduce
|
(reduce
|
||||||
(fn [acc in] (into acc (marker-names in)))
|
(fn [acc in] (into acc (get-marker-names in)))
|
||||||
#{} (truss/have vector? marker-or-markers))))))
|
#{} (truss/have vector? marker-or-markers))))))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
|
|
@ -97,9 +97,9 @@
|
||||||
ms [m1 m2]]
|
ms [m1 m2]]
|
||||||
|
|
||||||
(enc/qb 1e6 ; [45.52 47.48 44.85]
|
(enc/qb 1e6 ; [45.52 47.48 44.85]
|
||||||
(marker-names m1)
|
(get-marker-names m1)
|
||||||
(marker-names cm)
|
(get-marker-names cm)
|
||||||
(marker-names ms))))
|
(get-marker-names ms))))
|
||||||
|
|
||||||
;;;; Interop fns (called by `TelemereLogger`)
|
;;;; Interop fns (called by `TelemereLogger`)
|
||||||
|
|
||||||
|
|
@ -132,11 +132,10 @@
|
||||||
(org.slf4j.helpers.MessageFormatter/basicArrayFormat
|
(org.slf4j.helpers.MessageFormatter/basicArrayFormat
|
||||||
msg-pattern args))
|
msg-pattern args))
|
||||||
|
|
||||||
:data
|
:slf4j/args args ; Object[]
|
||||||
(enc/assoc-some nil
|
:slf4j/markers marker-names ; Usu. used for routing, filtering, xfns, etc.
|
||||||
:slf4j/marker-names marker-names
|
:data (when kvs {:slf4j/kvs kvs})})
|
||||||
:slf4j/args (when args (vec args))
|
|
||||||
:slf4j/kvs kvs)})
|
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(defn- log!
|
(defn- log!
|
||||||
|
|
@ -149,7 +148,7 @@
|
||||||
error (.getThrowable event)
|
error (.getThrowable event)
|
||||||
msg-pattern (.getMessage event)
|
msg-pattern (.getMessage event)
|
||||||
args (when-let [args (.getArgumentArray event)] args)
|
args (when-let [args (.getArgumentArray event)] args)
|
||||||
markers (when-let [markers (.getMarkers event)] (marker-names (vec markers)))
|
marker-names (when-let [markers (.getMarkers event)] (get-marker-names (vec markers)))
|
||||||
kvs (when-let [kvps (.getKeyValuePairs event)]
|
kvs (when-let [kvps (.getKeyValuePairs event)]
|
||||||
(reduce
|
(reduce
|
||||||
(fn [acc ^org.slf4j.event.KeyValuePair kvp]
|
(fn [acc ^org.slf4j.event.KeyValuePair kvp]
|
||||||
|
|
@ -157,11 +156,11 @@
|
||||||
nil kvps))]
|
nil kvps))]
|
||||||
|
|
||||||
(when-debug (println [:slf4j/fluent-log-call (sig-level level) logger-name]))
|
(when-debug (println [:slf4j/fluent-log-call (sig-level level) logger-name]))
|
||||||
(normalized-log! logger-name level inst error msg-pattern args markers kvs)))
|
(normalized-log! logger-name level inst error msg-pattern args marker-names kvs)))
|
||||||
|
|
||||||
;; Legacy API calls
|
;; Legacy API calls
|
||||||
([logger-name ^org.slf4j.event.Level level error msg-pattern args marker]
|
([logger-name ^org.slf4j.event.Level level error msg-pattern args marker]
|
||||||
(let [marker-names (when marker (marker-names marker))]
|
(let [marker-names (when marker (get-marker-names marker))]
|
||||||
(when-debug (println [:slf4j/legacy-log-call (sig-level level) logger-name]))
|
(when-debug (println [:slf4j/legacy-log-call (sig-level level) logger-name]))
|
||||||
(normalized-log! logger-name level (enc/now-inst*) error msg-pattern args marker-names nil))))
|
(normalized-log! logger-name level (enc/now-inst*) error msg-pattern args marker-names nil))))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue