diff --git a/main/test/taoensso/telemere_tests.cljc b/main/test/taoensso/telemere_tests.cljc index 8edd0c7..5d8804b 100644 --- a/main/test/taoensso/telemere_tests.cljc +++ b/main/test/taoensso/telemere_tests.cljc @@ -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")]) (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 (-> (.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") 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 (-> (.atInfo sl) (.addMarker m1) (.addMarker cm) (.log))) {:data {:slf4j/marker-names #{"Compound" "M1" "M2"}}}) "Fluent 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))) {:slf4j/markers #{"Compound" "M1" "M2"}}) "Fluent API: markers")])) (testing "Errors" [(is (sm? (with-sig (.warn sl "An error" ^Throwable ex1)) {:level :warn, :error ex1}) "Legacy API: errors") diff --git a/slf4j/src/taoensso/telemere/slf4j.clj b/slf4j/src/taoensso/telemere/slf4j.clj index 925c6c7..e301331 100644 --- a/slf4j/src/taoensso/telemere/slf4j.clj +++ b/slf4j/src/taoensso/telemere/slf4j.clj @@ -63,13 +63,13 @@ (comment [(est-marker! "a1" "a2") (get-marker "a1") (= (get-marker "a1") (get-marker "a1"))]) -(def ^:private marker-names +(def ^:private get-marker-names "Returns #{}. Cached => assumes markers NOT modified after creation." ;; We use `BasicMarkerFactory` so: ;; 1. Our markers are just labels (no other content besides their name). ;; 2. Markers with the same name are identical (enabling caching). (enc/fmemoize - (fn marker-names [marker-or-markers] + (fn get-marker-names [marker-or-markers] (if (instance? org.slf4j.Marker marker-or-markers) ;; Single marker @@ -79,15 +79,15 @@ (if-not (.hasReferences m) acc (enc/reduce-iterator! - (fn [acc ^org.slf4j.Marker in] - (if-not (.hasReferences in) - (conj acc (.getName in)) - (into acc (marker-names in)))) + (fn [acc ^org.slf4j.Marker in] + (if-not (.hasReferences in) + (conj acc (.getName in)) + (into acc (get-marker-names in)))) acc (.iterator m)))) ;; Vector of markers (reduce - (fn [acc in] (into acc (marker-names in))) + (fn [acc in] (into acc (get-marker-names in))) #{} (truss/have vector? marker-or-markers)))))) (comment @@ -97,9 +97,9 @@ ms [m1 m2]] (enc/qb 1e6 ; [45.52 47.48 44.85] - (marker-names m1) - (marker-names cm) - (marker-names ms)))) + (get-marker-names m1) + (get-marker-names cm) + (get-marker-names ms)))) ;;;; Interop fns (called by `TelemereLogger`) @@ -132,11 +132,10 @@ (org.slf4j.helpers.MessageFormatter/basicArrayFormat msg-pattern args)) - :data - (enc/assoc-some nil - :slf4j/marker-names marker-names - :slf4j/args (when args (vec args)) - :slf4j/kvs kvs)}) + :slf4j/args args ; Object[] + :slf4j/markers marker-names ; Usu. used for routing, filtering, xfns, etc. + :data (when kvs {:slf4j/kvs kvs})}) + nil) (defn- log! @@ -144,24 +143,24 @@ ;; Modern "fluent" API calls ([logger-name ^org.slf4j.event.LoggingEvent event] - (let [inst (or (when-let [ts (.getTimeStamp event)] (java.time.Instant/ofEpochMilli ts)) (enc/now-inst*)) - level (.getLevel event) - error (.getThrowable event) - msg-pattern (.getMessage event) - args (when-let [args (.getArgumentArray event)] args) - markers (when-let [markers (.getMarkers event)] (marker-names (vec markers))) - kvs (when-let [kvps (.getKeyValuePairs event)] - (reduce - (fn [acc ^org.slf4j.event.KeyValuePair kvp] - (assoc acc (.-key kvp) (.-value kvp))) - nil kvps))] + (let [inst (or (when-let [ts (.getTimeStamp event)] (java.time.Instant/ofEpochMilli ts)) (enc/now-inst*)) + level (.getLevel event) + error (.getThrowable event) + msg-pattern (.getMessage event) + args (when-let [args (.getArgumentArray event)] args) + marker-names (when-let [markers (.getMarkers event)] (get-marker-names (vec markers))) + kvs (when-let [kvps (.getKeyValuePairs event)] + (reduce + (fn [acc ^org.slf4j.event.KeyValuePair kvp] + (assoc acc (.-key kvp) (.-value kvp))) + nil kvps))] (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 ([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])) (normalized-log! logger-name level (enc/now-inst*) error msg-pattern args marker-names nil))))