[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.)?
;; - 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
;;
;; - Reading plan
@ -160,20 +160,22 @@
(enc/set-var-root! sigs/*default-handler-error-fn*
(fn [{:keys [error] :as m}]
(impl/signal!
{:level :error
{:kind :error
:level :error
:error error
:location {:ns "taoensso.encore.signals"}
:id :taoensso.encore.signals/handler-error
:msg "[encore/signals] Error executing wrapped handler fn"
:msg "Error executing wrapped handler fn"
:data (dissoc m :error)})))
(enc/set-var-root! sigs/*default-handler-backp-fn*
(fn [data]
(impl/signal!
{:level :warn
{:kind :event
:level :warn
:location {:ns "taoensso.encore.signals"}
: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}))))
;;;; Common signals
@ -378,6 +380,13 @@
#?(:clj
(enc/compile-when
(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])))
(comment (check-interop))

View file

@ -1,6 +1,6 @@
(ns ^:no-doc taoensso.telemere.streams
"Private ns, implementation detail.
Interop support: standard out/err streams -> Telemere."
Interop support: standard stream/s -> Telemere."
(:require
[taoensso.encore :as enc :refer [have have?]]
[taoensso.telemere.impl :as impl]))
@ -83,10 +83,22 @@
Resets `System/out` and `System/err` to their original value (prior to any
`streams->telemere!` call)."
[]
(locking monitor
(let [reset-out? (when-let [[out] (reset-vals! orig-out_ nil)] (System/setOut out) true)
reset-err? (when-let [[err] (reset-vals! orig-err_ nil)] (System/setErr err) true)]
(or reset-out? reset-err?))))
(let [[orig-out _] (reset-vals! orig-out_ nil)
[orig-err _] (reset-vals! orig-err_ nil)]
(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!
"Experimental, subject to change without notice!
@ -111,6 +123,14 @@
(let [out (when out (telemere-print-stream out))
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
(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)))

View file

@ -42,6 +42,13 @@
(defn ^:public tools-logging->telemere!
"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*
(fn [_] (TelemereLoggerFactory.))))