mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 18:01:10 +00:00
[nop] Misc improvements
This commit is contained in:
parent
7e8f692b93
commit
f9564b2fc5
10 changed files with 49 additions and 51 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"]
|
||||||
|
|
|
||||||
|
|
@ -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`."
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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"]]}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue