[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
{:dependencies
[[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"]]}
:dev

View file

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

View file

@ -30,7 +30,7 @@
(remove-ns 'taoensso.telemere)
(:api (enc/interns-overview)))
(enc/assert-min-encore-version [3 117 0])
(enc/assert-min-encore-version [3 120 0])
;;;; TODO
;; - Solution and docs for lib authors
@ -112,7 +112,13 @@
(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
@ -185,7 +191,7 @@
(when impl/present:otel? (delay (otel-get-default-providers)))))
#?(:clj
(def ^:dynamic *otel-tracer*
(def ^:dynamic ^:no-doc *otel-tracer*
"OpenTelemetry `Tracer` to use for Telemere's tracing signal creators
(`trace!`, `span!`, etc.), ∈ #{nil io.opentelemetry.api.trace.Tracer Delay}.
See also `otel-tracing?`, `otel-get-default-providers`."

View file

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

View file

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

View file

@ -13,10 +13,11 @@
[taoensso.telemere.timbre :as timbre]
#_[taoensso.telemere.tools-logging :as tools-logging]
#_[taoensso.telemere.streams :as streams]
#?(:clj [taoensso.telemere.slf4j :as slf4j])
#?(:clj [taoensso.telemere.open-telemetry :as otel])
#?(:clj [taoensso.telemere.files :as files])
#?(:clj [clojure.tools.logging :as ctl])))
#?@(:clj
[[taoensso.telemere.slf4j :as slf4j]
[taoensso.telemere.open-telemetry :as otel]
[taoensso.telemere.files :as files]
[clojure.tools.logging :as ctl]])))
(comment
(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")])
(testing "Message formatting"
(let [msgp "X is {} and Y is {}", expected {:msg_ "X is x and Y is y", :data {:slf4j/args ["x" "y"]}}]
[(is (sm? (with-sig (.info sl msgp "x" "y")) 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")]))
(let [msgp "x={},y={}", expected {:msg_ "x=1,y=2", :data {:slf4j/args ["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")]))
(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")
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")) {: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")]))
(testing "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
{:provided
{:dependencies
[[org.clojure/clojure "1.11.4"]
[[org.clojure/clojure "1.12.0"]
[org.slf4j/slf4j-api "2.0.16"]
[com.taoensso/telemere "1.0.0-SNAPSHOT"]]}

View file

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

View file

@ -1,5 +1,5 @@
(ns taoensso.telemere.slf4j
"Interop support for SLF4J -> Telemere.
"Interop support for SLF4Jv2 -> Telemere.
Telemere will attempt to load this ns automatically when possible.
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,
searches for `SLF4JServiceProvider` provider on classpath."
{:author "Peter Taoussanis (@ptaoussanis)"}
(:require
[taoensso.encore :as enc :refer [have have?]]
[taoensso.telemere.impl :as impl])
@ -40,7 +41,7 @@
org.slf4j.event.EventConstants/ERROR_INT :error
(throw
(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
@ -100,8 +101,7 @@
;;;; Interop fns (called by `TelemereLogger`)
(defn- allowed?
"Private, don't use.
Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
"Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
[logger-name level]
(when-debug (println [:slf4j/allowed? (sig-level level) logger-name]))
(impl/signal-allowed?
@ -137,8 +137,7 @@
nil)
(defn- log!
"Private, don't use.
Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
"Called by `com.taoensso.telemere.slf4j.TelemereLogger`."
;; Modern "fluent" API calls
([logger-name ^org.slf4j.event.LoggingEvent event]