mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-17 01:51: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
|
||||
{: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
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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`."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -8,15 +8,16 @@
|
|||
:refer [signal! with-signal with-signals]
|
||||
:rename {signal! sig!, with-signal with-sig, with-signals with-sigs}]
|
||||
|
||||
[taoensso.telemere.api :as api]
|
||||
[taoensso.telemere.utils :as utils]
|
||||
[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])))
|
||||
[taoensso.telemere.api :as api]
|
||||
[taoensso.telemere.utils :as utils]
|
||||
[taoensso.telemere.timbre :as timbre]
|
||||
#_[taoensso.telemere.tools-logging :as tools-logging]
|
||||
#_[taoensso.telemere.streams :as streams]
|
||||
#?@(: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")
|
||||
|
|
|
|||
|
|
@ -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"]]}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,10 +52,10 @@ public class TelemereLogger extends LegacyAbstractLogger implements LoggingEvent
|
|||
private static IFn isAllowedFn;
|
||||
|
||||
static void init() {
|
||||
IFn requireFn = Clojure.var("clojure.core", "require");
|
||||
requireFn.invoke(Clojure.read("taoensso.telemere.slf4j"));
|
||||
isAllowedFn = Clojure.var("taoensso.telemere.slf4j", "allowed?");
|
||||
logFn = Clojure.var("taoensso.telemere.slf4j", "log!");
|
||||
IFn requireFn = Clojure.var("clojure.core", "require");
|
||||
requireFn.invoke(Clojure.read("taoensso.telemere.slf4j"));
|
||||
isAllowedFn = Clojure.var("taoensso.telemere.slf4j", "allowed?");
|
||||
logFn = Clojure.var("taoensso.telemere.slf4j", "log!");
|
||||
}
|
||||
|
||||
protected TelemereLogger(String name) { this.name = name; }
|
||||
|
|
@ -72,7 +72,7 @@ public class TelemereLogger extends LegacyAbstractLogger implements LoggingEvent
|
|||
@Override protected String getFullyQualifiedCallerName() { return null; }
|
||||
@Override
|
||||
protected void handleNormalizedLoggingCall(Level level, Marker marker, String messagePattern, Object[] arguments, Throwable throwable) {
|
||||
logFn.invoke(this.name, level, throwable, messagePattern, arguments, marker); // Legacy API, called after level check
|
||||
logFn.invoke(this.name, level, throwable, messagePattern, arguments, marker); // Legacy API, called after level check
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(); }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Reference in a new issue