[nop] Restructure handlers

This commit is contained in:
Peter Taoussanis 2024-04-05 17:46:55 +02:00
parent 99b2e0c0cb
commit 323ba0e99c
4 changed files with 51 additions and 58 deletions

View file

@ -7,12 +7,13 @@
{:author "Peter Taoussanis (@ptaoussanis)"}
(:refer-clojure :exclude [binding newline])
(:require
[taoensso.encore :as enc :refer [binding have have?]]
[taoensso.encore.signals :as sigs]
[taoensso.telemere.impl :as impl]
[taoensso.telemere.utils :as utils]
[taoensso.telemere.handlers :as handlers]
#?(:clj [taoensso.telemere.streams :as streams]))
[taoensso.encore :as enc :refer [binding have have?]]
[taoensso.encore.signals :as sigs]
[taoensso.telemere.impl :as impl]
[taoensso.telemere.utils :as utils]
[taoensso.telemere.console-handlers :as console-handlers]
#?(:clj [taoensso.telemere.file-handler :as file-handler])
#?(:clj [taoensso.telemere.streams :as streams]))
#?(:cljs
(:require-macros
@ -369,15 +370,23 @@
;;;; Handlers
(enc/def* help:signal-formatters
"Common signal formatters include:
(utils/format-signal-str->fn) {<opts>}) ; For human-readable string output (default)
(utils/format-signal->edn-fn) {<opts>}) ; For edn output
(utils/format-signal->json-fn {<opts>}) ; For JSON output
See relevant docstrings for details."
"See docstring")
(enc/defaliases
#?(:default handlers/console-handler)
#?(:cljs handlers/raw-console-handler)
#?(:clj handlers/file-handler))
#?(:default console-handlers/handler:console)
#?(:cljs console-handlers/handler:console-raw)
#?(:clj file-handler/handler:file))
(defonce ^:no-doc __add-default-handlers
(do
(add-handler! :default-console-handler
(console-handler))
(add-handler! :default/console (handler:console))
nil))
;;;; Flow benchmarks

View file

@ -1,28 +1,15 @@
(ns taoensso.telemere.handlers
"Built-in Telemere handlers."
(ns ^:no-doc taoensso.telemere.console-handlers
"Private ns, implementation detail."
(:require
[taoensso.encore :as enc :refer [have have?]]
[taoensso.telemere.utils :as utils]
#?(:clj [taoensso.telemere.handlers.file-handler :as file-handler])))
[taoensso.telemere.utils :as utils]))
(comment
(require '[taoensso.telemere :as tel])
(remove-ns 'taoensso.telemere.handlers)
(remove-ns 'taoensso.telemere.console-handlers)
(:api (enc/interns-overview)))
;;;; Console handlers
(enc/def* help:signal-formatters
"Common signal formatters include:
(utils/format-signal-str->fn) {<opts>}) ; For human-readable string output (default)
(utils/format-signal->edn-fn) {<opts>}) ; For edn output
(utils/format-signal->json-fn {<opts>}) ; For JSON output
See relevant docstrings for details."
"See docstring")
#?(:clj
(defn console-handler
(defn ^:public handler:console
"Experimental, subject to change.
Returns a (fn handler [signal]) that:
@ -35,7 +22,7 @@
`:stream` - `java.io.writer`
Defaults to `*err*` if `utils/error-signal?` is true, and `*out*` otherwise."
([] (console-handler nil))
([] (handler:console nil))
([{:keys [format-signal-fn stream]
:or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -43,7 +30,7 @@
error-signal? utils/error-signal?
nl utils/newline]
(fn a-console-handler
(fn a-handler:console
([]) ; Shut down (no-op)
([signal]
(let [^java.io.Writer stream
@ -53,7 +40,7 @@
(.flush stream))))))))
:cljs
(defn console-handler
(defn ^:public handler:console
"Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that:
@ -63,7 +50,7 @@
Options:
`:format-signal-fn` - (fn [signal]) => output, see `help:signal-formatters`"
([] (console-handler nil))
([] (handler:console nil))
([{:keys [format-signal-fn]
:or {format-signal-fn (utils/format-signal->str-fn)}}]
@ -71,7 +58,7 @@
(let [js-console-logger utils/js-console-logger
nl utils/newline]
(fn a-console-handler
(fn a-handler:console
([]) ; Shut down (no-op)
([signal]
(when-let [output (format-signal-fn signal)]
@ -88,7 +75,7 @@
([x1 x2 x3 & more] (apply logger x1 x2 x3 more)))))
#?(:cljs
(defn raw-console-handler
(defn ^:public handler:console-raw
"Experimental, subject to change.
If `js/console` exists, returns a (fn handler [signal]) that:
@ -98,7 +85,7 @@
Intended for use with browser formatting tools like `binaryage/devtools`,
Ref. <https://github.com/binaryage/cljs-devtools>."
([] (raw-console-handler nil))
([] (handler:console-raw nil))
([{:keys [format-signal-prelude-fn format-nsecs-fn] :as opts
:or
{format-signal-prelude-fn (utils/format-signal-prelude-fn) ; (fn [signal])
@ -113,7 +100,7 @@
:format-error-fn nil
:raw-error? true})]
(fn a-raw-console-handler
(fn a-handler:console-raw
([]) ; Shut down (no-op)
([signal]
(let [{:keys [level error]} signal
@ -127,7 +114,3 @@
(.call logger logger stack))
(.groupEnd js/console)))))))))
;;;; File handler
#?(:clj (enc/defalias file-handler/file-handler))

View file

@ -1,11 +1,11 @@
(ns ^:no-doc taoensso.telemere.handlers.file-handler
(ns ^:no-doc taoensso.telemere.file-handler
"Private ns, implementation detail."
(:require
[taoensso.encore :as enc :refer [have have?]]
[taoensso.telemere.utils :as utils]))
(comment
(remove-ns 'taoensso.telemere.handlers.file-handler)
(remove-ns 'taoensso.telemere.file-handler)
(:api (enc/interns-overview)))
;;;; Implementation
@ -263,7 +263,7 @@
;;;; Handler
(defn ^:public file-handler
(defn ^:public handler:file
"Experimental, subject to change.
Returns a (fn handler [signal]) that:
@ -296,7 +296,7 @@
`:max-num-intervals` #{nil <pos-int>} (default 6)
Maximum number of intervals (days/weeks/months) to retain."
([] (file-handler nil))
([] (handler:file nil))
([{:keys
[format-signal-fn
path interval
@ -357,7 +357,7 @@
lock (Object.)]
(fn a-file-handler
(fn a-handler:file
([] (locking lock (fw))) ; Close writer
([signal]
(when-let [output (format-signal-fn signal)]
@ -392,10 +392,10 @@
(.setLastModified (utils/as-file "test/logs/app6.log")
(enc/as-udt "1999-01-01T01:00:00.00Z"))
(let [hf
(file-handler
(let [hfn
(handler:file
{:path "test/logs/app6.log"
:max-num-intervals 2
:max-num-parts 2})]
(hf {:info :level :msg_ "hello"}) (hf)))
(hfn {:info :level :msg_ "hello"}) (hfn)))

View file

@ -8,12 +8,13 @@
:refer [signal! with-signal with-signals]
:rename {signal! sig!, with-signal with-sig, with-signals with-sigs}]
[taoensso.telemere.utils :as utils]
[taoensso.telemere.timbre-shim :as timbre]
[taoensso.telemere.handlers :as handlers]
#?(:clj [taoensso.telemere.handlers.file-handler :as fh])
[taoensso.telemere.utils :as utils]
[taoensso.telemere.timbre-shim :as timbre]
#?(:clj [taoensso.telemere.slf4j :as slf4j])
#?(:clj [clojure.tools.logging :as ctl])))
#?(:clj [clojure.tools.logging :as ctl])
#?(:default [taoensso.telemere.console-handlers :as ch])
#?(:clj [taoensso.telemere.file-handler :as fh])))
(comment
(remove-ns 'taoensso.telemere-tests)
@ -38,7 +39,7 @@
(def pstr? (enc/pred string?))
(def pnat-int? (enc/pred enc/nat-int?)))
;; (tel/remove-handler! :default-console-handler)
;; (tel/remove-handler! :default/console)
(let [sig-handlers_ (atom nil)]
(test/use-fixtures :once
(enc/test-fixtures
@ -790,9 +791,9 @@
(deftest _other-handlers
;; For now just testing that basic construction succeeds
[#?(:default (is (fn? (handlers/console-handler))))
#?(:cljs (is (fn? (handlers/raw-console-handler))))
#?(:clj (is (fn? (handlers/file-handler))))])
[#?(:default (is (fn? (ch/handler:console))))
#?(:cljs (is (fn? (ch/handler:console-raw))))
#?(:clj (is (fn? (fh/handler:file))))])
;;;;