[nop] Misc improvements

This commit is contained in:
Peter Taoussanis 2024-08-29 13:17:16 +02:00
parent 7e8f692b93
commit f9564b2fc5
10 changed files with 49 additions and 51 deletions

View file

@ -14,7 +14,7 @@
{:provided {:provided
{:dependencies {:dependencies
[[org.clojure/clojurescript "1.11.132"] [[org.clojure/clojurescript "1.11.132"]
[org.clojure/clojure "1.11.4"] [org.clojure/clojure "1.12.0"]
[com.taoensso/telemere "1.0.0-SNAPSHOT"]]} [com.taoensso/telemere "1.0.0-SNAPSHOT"]]}
:dev :dev

View file

@ -10,7 +10,7 @@
:scm {:name "git" :url "https://github.com/taoensso/telemere"} :scm {:name "git" :url "https://github.com/taoensso/telemere"}
:dependencies :dependencies
[[com.taoensso/encore "3.117.0"]] [[com.taoensso/encore "3.120.0-SNAPSHOT"]]
:test-paths ["test" #_"src"] :test-paths ["test" #_"src"]
@ -18,7 +18,7 @@
{;; :default [:base :system :user :provided :dev] {;; :default [:base :system :user :provided :dev]
:provided {:dependencies [[org.clojure/clojurescript "1.11.132"] :provided {:dependencies [[org.clojure/clojurescript "1.11.132"]
[org.clojure/clojure "1.11.4"]]} [org.clojure/clojure "1.11.4"]]}
:c1.12 {:dependencies [[org.clojure/clojure "1.12.0-rc1"]]} :c1.12 {:dependencies [[org.clojure/clojure "1.12.0"]]}
:c1.11 {:dependencies [[org.clojure/clojure "1.11.4"]]} :c1.11 {:dependencies [[org.clojure/clojure "1.11.4"]]}
:c1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]} :c1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]}
@ -55,9 +55,9 @@
#_[org.slf4j/slf4j-nop "2.0.16"] #_[org.slf4j/slf4j-nop "2.0.16"]
;;; For optional handlers ;;; For optional handlers
[io.opentelemetry/opentelemetry-api "1.41.0"] [io.opentelemetry/opentelemetry-api "1.42.1"]
[io.opentelemetry/opentelemetry-sdk-extension-autoconfigure "1.41.0"] [io.opentelemetry/opentelemetry-sdk-extension-autoconfigure "1.42.1"]
[io.opentelemetry/opentelemetry-exporter-otlp "1.41.0"] [io.opentelemetry/opentelemetry-exporter-otlp "1.42.1"]
#_[io.opentelemetry/opentelemetry-exporters-jaeger "0.9.1"] #_[io.opentelemetry/opentelemetry-exporters-jaeger "0.9.1"]
[metosin/jsonista "0.3.10"] [metosin/jsonista "0.3.10"]
[com.draines/postal "2.0.5"] [com.draines/postal "2.0.5"]

View file

@ -30,7 +30,7 @@
(remove-ns 'taoensso.telemere) (remove-ns 'taoensso.telemere)
(:api (enc/interns-overview))) (:api (enc/interns-overview)))
(enc/assert-min-encore-version [3 117 0]) (enc/assert-min-encore-version [3 120 0])
;;;; TODO ;;;; TODO
;; - Solution and docs for lib authors ;; - Solution and docs for lib authors
@ -112,7 +112,13 @@
(utils/nano-uid-fn {:secure? false})) (utils/nano-uid-fn {:secure? false}))
(comment (enc/qb 1e6 (enc/uuid) (*uid-fn* true) (*uid-fn* false))) ; [168.83 79.02 62.95] (comment
((utils/nano-uid-fn) true) ; "vdh0bL0YHOXYKWn4sM88e"
((utils/hex-uid-fn) true) ; "62c0f80d3fb15fb4e356bdd84bae223e"
(let [nuid (utils/nano-uid-fn)
huid (utils/hex-uid-fn)]
(enc/qb 1e6 ; [168.29 21.85 68.6 46.63]
(enc/uuid) *uid-fn* (nuid true) (huid true))))
;;;; OpenTelemetry ;;;; OpenTelemetry
@ -185,7 +191,7 @@
(when impl/present:otel? (delay (otel-get-default-providers))))) (when impl/present:otel? (delay (otel-get-default-providers)))))
#?(:clj #?(:clj
(def ^:dynamic *otel-tracer* (def ^:dynamic ^:no-doc *otel-tracer*
"OpenTelemetry `Tracer` to use for Telemere's tracing signal creators "OpenTelemetry `Tracer` to use for Telemere's tracing signal creators
(`trace!`, `span!`, etc.), ∈ #{nil io.opentelemetry.api.trace.Tracer Delay}. (`trace!`, `span!`, etc.), ∈ #{nil io.opentelemetry.api.trace.Tracer Delay}.
See also `otel-tracing?`, `otel-get-default-providers`." See also `otel-tracing?`, `otel-get-default-providers`."

View file

@ -15,12 +15,12 @@
(defmacro ^:private when-debug [& body] (when #_true false `(do ~@body))) (defmacro ^:private when-debug [& body] (when #_true false `(do ~@body)))
(deftype TelemereLogger [logger-name] (deftype TelemereLogger [logger-name]
;; `logger-name` is typically ns string
clojure.tools.logging.impl/Logger clojure.tools.logging.impl/Logger
(enabled? [_ level] (enabled? [_ level]
(when-debug (println [:tools-logging/enabled? level logger-name])) (when-debug (println [:tools-logging/enabled? level logger-name]))
(impl/signal-allowed? (impl/signal-allowed?
{:location {:ns logger-name} ; Typically *ns* string {:location {:ns logger-name}
:kind :tools-logging :kind :tools-logging
:level level})) :level level}))
@ -28,7 +28,7 @@
(when-debug (println [:tools-logging/write! level logger-name])) (when-debug (println [:tools-logging/write! level logger-name]))
(impl/signal! (impl/signal!
{:allow? true ; Pre-filtered by `enabled?` call {:allow? true ; Pre-filtered by `enabled?` call
:location {:ns logger-name} ; Typically *ns* string :location {:ns logger-name}
:kind :tools-logging :kind :tools-logging
:level level :level level
:error throwable :error throwable

View file

@ -754,8 +754,8 @@
Options: Options:
`:incl-newline?` - Include terminating system newline? (default true) `:incl-newline?` - Include terminating system newline? (default true)
`:preamble-fn` - (fn [signal]) => signal preamble string, see [1]. `:preamble-fn` - (fn [signal]) => signal preamble string, see [1]
`:content-fn` - (fn [signal]) => signal content string, see [2]. `:content-fn` - (fn [signal]) => signal content string, see [2]
[1] `taoensso.telemere.utils/signal-preamble-fn`, etc. [1] `taoensso.telemere.utils/signal-preamble-fn`, etc.
[2] `taoensso.telemere.utils/signal-content-fn`, etc. [2] `taoensso.telemere.utils/signal-content-fn`, etc.

View file

@ -13,10 +13,11 @@
[taoensso.telemere.timbre :as timbre] [taoensso.telemere.timbre :as timbre]
#_[taoensso.telemere.tools-logging :as tools-logging] #_[taoensso.telemere.tools-logging :as tools-logging]
#_[taoensso.telemere.streams :as streams] #_[taoensso.telemere.streams :as streams]
#?(:clj [taoensso.telemere.slf4j :as slf4j]) #?@(:clj
#?(:clj [taoensso.telemere.open-telemetry :as otel]) [[taoensso.telemere.slf4j :as slf4j]
#?(:clj [taoensso.telemere.files :as files]) [taoensso.telemere.open-telemetry :as otel]
#?(:clj [clojure.tools.logging :as ctl]))) [taoensso.telemere.files :as files]
[clojure.tools.logging :as ctl]])))
(comment (comment
(remove-ns 'taoensso.telemere-tests) (remove-ns 'taoensso.telemere-tests)
@ -687,9 +688,9 @@
(is (sm? (with-sig (-> (.atWarn sl) (.log "Hello"))) {:level :warn, :ns "my.class", :kind :slf4j, :msg_ "Hello", :inst pinst?}) "Fluent API: warn basics")]) (is (sm? (with-sig (-> (.atWarn sl) (.log "Hello"))) {:level :warn, :ns "my.class", :kind :slf4j, :msg_ "Hello", :inst pinst?}) "Fluent API: warn basics")])
(testing "Message formatting" (testing "Message formatting"
(let [msgp "X is {} and Y is {}", expected {:msg_ "X is x and Y is y", :data {:slf4j/args ["x" "y"]}}] (let [msgp "x={},y={}", expected {:msg_ "x=1,y=2", :data {:slf4j/args ["1" "2"]}}]
[(is (sm? (with-sig (.info sl msgp "x" "y")) 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 "x") (.addArgument "y") (.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")]))
(is (sm? (with-sig (-> (.atInfo sl) (.addKeyValue "k1" "v1") (.addKeyValue "k2" "v2") (.log))) {:data {:slf4j/kvs {"k1" "v1", "k2" "v2"}}}) "Fluent API: kvs") (is (sm? (with-sig (-> (.atInfo sl) (.addKeyValue "k1" "v1") (.addKeyValue "k2" "v2") (.log))) {:data {:slf4j/kvs {"k1" "v1", "k2" "v2"}}}) "Fluent API: kvs")
@ -698,8 +699,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")) {: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 (-> (.atInfo sl) (.addMarker m1) (.addMarker cm) (.log))) {:data {:slf4j/marker-names #{"Compound" "M1" "M2"}}}) "Fluent API: markers")]))
(testing "Errors" (testing "Errors"
[(is (sm? (with-sig (.warn sl "An error" ^Throwable ex1)) {:level :warn, :error pex1?}) "Legacy API: errors") [(is (sm? (with-sig (.warn sl "An error" ^Throwable ex1)) {:level :warn, :error pex1?}) "Legacy API: errors")

View file

@ -16,7 +16,7 @@
:profiles :profiles
{:provided {:provided
{:dependencies {:dependencies
[[org.clojure/clojure "1.11.4"] [[org.clojure/clojure "1.12.0"]
[org.slf4j/slf4j-api "2.0.16"] [org.slf4j/slf4j-api "2.0.16"]
[com.taoensso/telemere "1.0.0-SNAPSHOT"]]} [com.taoensso/telemere "1.0.0-SNAPSHOT"]]}

View file

@ -40,15 +40,7 @@ public class TelemereLoggerFactory implements ILoggerFactory {
TelemereLogger.lazyInit(); TelemereLogger.lazyInit();
} }
public Logger getLogger(String name) { public Logger getLogger(String name) { return loggerMap.computeIfAbsent(name, this::createLogger); }
return loggerMap.computeIfAbsent(name, this::createLogger); protected Logger createLogger(String name) { return new TelemereLogger(name); }
} protected void reset() { loggerMap.clear(); }
protected Logger createLogger(String name) {
return new TelemereLogger(name);
}
protected void reset() {
loggerMap.clear();
}
} }

View file

@ -1,5 +1,5 @@
(ns taoensso.telemere.slf4j (ns taoensso.telemere.slf4j
"Interop support for SLF4J -> Telemere. "Interop support for SLF4Jv2 -> Telemere.
Telemere will attempt to load this ns automatically when possible. Telemere will attempt to load this ns automatically when possible.
To use Telemere as your SLF4J backend/provider, just include the To use Telemere as your SLF4J backend/provider, just include the
@ -16,6 +16,7 @@
- SLF4J uses standard `ServiceLoader` mechanism to find its logging backend, - SLF4J uses standard `ServiceLoader` mechanism to find its logging backend,
searches for `SLF4JServiceProvider` provider on classpath." searches for `SLF4JServiceProvider` provider on classpath."
{:author "Peter Taoussanis (@ptaoussanis)"}
(:require (:require
[taoensso.encore :as enc :refer [have have?]] [taoensso.encore :as enc :refer [have have?]]
[taoensso.telemere.impl :as impl]) [taoensso.telemere.impl :as impl])
@ -40,7 +41,7 @@
org.slf4j.event.EventConstants/ERROR_INT :error org.slf4j.event.EventConstants/ERROR_INT :error
(throw (throw
(ex-info "Unexpected `org.slf4j.event.Level`" (ex-info "Unexpected `org.slf4j.event.Level`"
{:level {:value level, :type (type level)}})))) {:level (enc/typed-val level)}))))
(comment (enc/qb 1e6 (sig-level org.slf4j.event.Level/INFO))) ; 36.47 (comment (enc/qb 1e6 (sig-level org.slf4j.event.Level/INFO))) ; 36.47
@ -100,8 +101,7 @@
;;;; Interop fns (called by `TelemereLogger`) ;;;; Interop fns (called by `TelemereLogger`)
(defn- allowed? (defn- allowed?
"Private, don't use. "Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
[logger-name level] [logger-name level]
(when-debug (println [:slf4j/allowed? (sig-level level) logger-name])) (when-debug (println [:slf4j/allowed? (sig-level level) logger-name]))
(impl/signal-allowed? (impl/signal-allowed?
@ -137,8 +137,7 @@
nil) nil)
(defn- log! (defn- log!
"Private, don't use. "Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
;; Modern "fluent" API calls ;; Modern "fluent" API calls
([logger-name ^org.slf4j.event.LoggingEvent event] ([logger-name ^org.slf4j.event.LoggingEvent event]