[new] Generate relevant internal signals

This commit is contained in:
Peter Taoussanis 2024-03-06 19:02:58 +01:00
parent 1440a764c9
commit 6d3e019616
3 changed files with 46 additions and 10 deletions

View file

@ -38,7 +38,7 @@
;; ;;
;; - Tests for utils (hostname, formatters, etc.)? ;; - Tests for utils (hostname, formatters, etc.)?
;; - Remaining docstrings and TODOs ;; - Remaining docstrings and TODOs
;; - Document kinds: #{:log :spy :trace :event :error :system/out :system/err <user>} ;; - Kinds: #{:log :spy :trace :event :error :system/out :system/err <user>}
;; - General polish ;; - General polish
;; ;;
;; - Reading plan ;; - Reading plan
@ -160,20 +160,22 @@
(enc/set-var-root! sigs/*default-handler-error-fn* (enc/set-var-root! sigs/*default-handler-error-fn*
(fn [{:keys [error] :as m}] (fn [{:keys [error] :as m}]
(impl/signal! (impl/signal!
{:level :error {:kind :error
:level :error
:error error :error error
:location {:ns "taoensso.encore.signals"} :location {:ns "taoensso.encore.signals"}
:id :taoensso.encore.signals/handler-error :id :taoensso.encore.signals/handler-error
:msg "[encore/signals] Error executing wrapped handler fn" :msg "Error executing wrapped handler fn"
:data (dissoc m :error)}))) :data (dissoc m :error)})))
(enc/set-var-root! sigs/*default-handler-backp-fn* (enc/set-var-root! sigs/*default-handler-backp-fn*
(fn [data] (fn [data]
(impl/signal! (impl/signal!
{:level :warn {:kind :event
:level :warn
:location {:ns "taoensso.encore.signals"} :location {:ns "taoensso.encore.signals"}
:id :taoensso.encore.signals/handler-back-pressure :id :taoensso.encore.signals/handler-back-pressure
:msg "[encore/signals] Back pressure on wrapped handler fn" :msg "Back pressure on wrapped handler fn"
:data data})))) :data data}))))
;;;; Common signals ;;;; Common signals
@ -378,6 +380,13 @@
#?(:clj #?(:clj
(enc/compile-when (enc/compile-when
(and org.slf4j.Logger com.taoensso.telemere.slf4j.TelemereLogger) (and org.slf4j.Logger com.taoensso.telemere.slf4j.TelemereLogger)
(impl/signal!
{:kind :event
:level :info
:id :taoensso.telemere/slf4j->telemere!
:msg "Enabling interop: SLF4J -> Telemere"})
(require '[taoensso.telemere.slf4j :as slf4j]))) (require '[taoensso.telemere.slf4j :as slf4j])))
(comment (check-interop)) (comment (check-interop))

View file

@ -1,6 +1,6 @@
(ns ^:no-doc taoensso.telemere.streams (ns ^:no-doc taoensso.telemere.streams
"Private ns, implementation detail. "Private ns, implementation detail.
Interop support: standard out/err streams -> Telemere." Interop support: standard stream/s -> Telemere."
(: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]))
@ -83,10 +83,22 @@
Resets `System/out` and `System/err` to their original value (prior to any Resets `System/out` and `System/err` to their original value (prior to any
`streams->telemere!` call)." `streams->telemere!` call)."
[] []
(locking monitor (let [[orig-out _] (reset-vals! orig-out_ nil)
(let [reset-out? (when-let [[out] (reset-vals! orig-out_ nil)] (System/setOut out) true) [orig-err _] (reset-vals! orig-err_ nil)]
reset-err? (when-let [[err] (reset-vals! orig-err_ nil)] (System/setErr err) true)]
(or reset-out? reset-err?)))) (impl/signal!
{:kind :event
:level :info
:id :taoensso.telemere/streams->telemere!
:msg "Disabling interop: standard stream/s -> Telemere"
:data {:system/out? (boolean orig-out)
:system/err? (boolean orig-err)}})
(locking monitor
(when orig-out (System/setOut orig-out))
(when orig-err (System/setErr orig-err)))
(boolean (or orig-out orig-err))))
(defn ^:public streams->telemere! (defn ^:public streams->telemere!
"Experimental, subject to change without notice! "Experimental, subject to change without notice!
@ -111,6 +123,14 @@
(let [out (when out (telemere-print-stream out)) (let [out (when out (telemere-print-stream out))
err (when err (telemere-print-stream err))] err (when err (telemere-print-stream err))]
(impl/signal!
{:kind :event
:level :info
:id :taoensso.telemere/streams->telemere!
:msg "Enabling interop: standard stream/s -> Telemere"
:data {:system/out? (boolean out)
:system/err? (boolean err)}})
(locking monitor (locking monitor
(when out (compare-and-set! orig-out_ nil System/out) (System/setOut out)) (when out (compare-and-set! orig-out_ nil System/out) (System/setOut out))
(when err (compare-and-set! orig-err_ nil System/err) (System/setErr err))) (when err (compare-and-set! orig-err_ nil System/err) (System/setErr err)))

View file

@ -42,6 +42,13 @@
(defn ^:public tools-logging->telemere! (defn ^:public tools-logging->telemere!
"Configures `clojure.tools.logging` to use Telemere as its logging implementation." "Configures `clojure.tools.logging` to use Telemere as its logging implementation."
[] []
(impl/signal!
{:kind :event
:level :info
:id :taoensso.telemere/clojure.tools.logging->telemere!
:msg "Enabling interop: `clojure.tools.logging` -> Telemere"})
(alter-var-root #'clojure.tools.logging/*logger-factory* (alter-var-root #'clojure.tools.logging/*logger-factory*
(fn [_] (TelemereLoggerFactory.)))) (fn [_] (TelemereLoggerFactory.))))