mirror of
https://github.com/taoensso/telemere.git
synced 2025-12-18 10:11:10 +00:00
[mod] pr-signal: switch to single (opts) arity only
For consistency with other utils and handlers
This commit is contained in:
parent
e7cce0c12b
commit
1f624b6d50
4 changed files with 40 additions and 29 deletions
|
|
@ -141,7 +141,7 @@
|
||||||
;; Create console which writes signals as edn
|
;; Create console which writes signals as edn
|
||||||
(def my-handler
|
(def my-handler
|
||||||
(t/handler:console
|
(t/handler:console
|
||||||
{:output-fn (t/pr-signal-fn :edn)}))
|
{:output-fn (t/pr-signal-fn {:pr-fn :edn})}))
|
||||||
|
|
||||||
(my-handler my-signal) ; =>
|
(my-handler my-signal) ; =>
|
||||||
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
|
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
|
||||||
|
|
@ -152,8 +152,9 @@
|
||||||
(t/handler:console
|
(t/handler:console
|
||||||
{:output-fn
|
{:output-fn
|
||||||
(t/pr-signal-fn
|
(t/pr-signal-fn
|
||||||
|
{:pr-fn
|
||||||
#?(:cljs :json
|
#?(:cljs :json
|
||||||
:clj jsonista.core/write-value-as-string))}))
|
:clj jsonista.core/write-value-as-string)})}))
|
||||||
|
|
||||||
(my-handler my-signal) ; =>
|
(my-handler my-signal) ; =>
|
||||||
;; {"inst":"2024-04-11T10:54:57.202869Z","msg_":"My message","ns":"examples", ...}
|
;; {"inst":"2024-04-11T10:54:57.202869Z","msg_":"My message","ns":"examples", ...}
|
||||||
|
|
|
||||||
|
|
@ -582,26 +582,27 @@
|
||||||
- Returns a machine-readable (minified) signal string.
|
- Returns a machine-readable (minified) signal string.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
`pr-fn` - ∈ #{<unary-fn> :edn :json (Cljs only)}
|
`:pr-fn` - ∈ #{<unary-fn> :edn (default) :json (Cljs only)}
|
||||||
`:incl-thread?` - Include signal `:thread` info? (default false)
|
`:incl-thread?` - Include signal `:thread` info? (default false)
|
||||||
`:incl-kvs?` - Include signal `:kvs` info? (default false)
|
`:incl-kvs?` - Include signal `:kvs` info? (default false)
|
||||||
`:incl-newline?` - Include terminating system newline? (default true)
|
`:incl-newline?` - Include terminating system newline? (default true)
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
(pr-signal-fn :edn {<opts>})
|
(pr-signal-fn {:pr-fn :edn ...}) ; Outputs edn
|
||||||
(pr-signal-fn :json {<opts>}) ; Cljs only
|
(pr-signal-fn {:pr-fn :json ...}) ; Outputs JSON (Cljs only)
|
||||||
|
|
||||||
|
To output JSON for Clj, you must provide an appropriate `:pr-fn`.
|
||||||
|
`jsonista` is one good option, Ref. <https://github.com/metosin/jsonista>:
|
||||||
|
|
||||||
;; To output JSON for Clj, you must provide an appropriate `pr-fn`.
|
|
||||||
;; `jsonista` is a good option, Ref. <https://github.com/metosin/jsonista>:
|
|
||||||
(require '[jsonista.core :as jsonista])
|
(require '[jsonista.core :as jsonista])
|
||||||
(pr-signal-fn jsonista/write-value-as-string {<opts>})
|
(pr-signal-fn {:pr-fn jsonista/write-value-as-string ...})
|
||||||
|
|
||||||
See also `format-signal-fn` for human-readable output."
|
See also `format-signal-fn` for human-readable output."
|
||||||
([pr-fn] (pr-signal-fn pr-fn nil))
|
([] (pr-signal-fn nil))
|
||||||
([pr-fn
|
([{:keys [incl-thread? incl-kvs? incl-newline?, pr-fn prep-fn]
|
||||||
{:keys [incl-thread? incl-kvs? incl-newline?, prep-fn]
|
|
||||||
:or
|
:or
|
||||||
{incl-newline? true
|
{incl-newline? true
|
||||||
|
pr-fn :edn
|
||||||
prep-fn
|
prep-fn
|
||||||
(comp error-in-signal->maps
|
(comp error-in-signal->maps
|
||||||
minify-signal)}}]
|
minify-signal)}}]
|
||||||
|
|
@ -611,7 +612,12 @@
|
||||||
(or
|
(or
|
||||||
(case pr-fn
|
(case pr-fn
|
||||||
:edn pr-edn
|
:edn pr-edn
|
||||||
#?@(:cljs [:json pr-json])
|
:json
|
||||||
|
#?(:cljs pr-json
|
||||||
|
:clj
|
||||||
|
(throw
|
||||||
|
(ex-info "`:json` pr-fn only supported in Cljs. To output JSON in Clj, please provide an appropriate unary fn instead (e.g. jsonista/write-value-as-string)."
|
||||||
|
{})))
|
||||||
|
|
||||||
(if (fn? pr-fn)
|
(if (fn? pr-fn)
|
||||||
(do pr-fn)
|
(do pr-fn)
|
||||||
|
|
@ -634,8 +640,8 @@
|
||||||
(do output)))))))
|
(do output)))))))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
((pr-signal-fn :edn) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}})))
|
((pr-signal-fn {:pr-fn :edn}) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}})))
|
||||||
((pr-signal-fn (fn [_] "str")) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}}))))
|
((pr-signal-fn {:pr-fn (fn [_] "str")}) (tel/with-signal (tel/event! ::ev-id {:kvs {:k1 "v1"}}))))
|
||||||
|
|
||||||
(defn format-signal-fn
|
(defn format-signal-fn
|
||||||
"Experimental, subject to change.
|
"Experimental, subject to change.
|
||||||
|
|
|
||||||
|
|
@ -691,18 +691,21 @@
|
||||||
|
|
||||||
[(testing ":edn"
|
[(testing ":edn"
|
||||||
(let [sig (update sig :inst enc/inst->udt)
|
(let [sig (update sig :inst enc/inst->udt)
|
||||||
sig* (enc/read-edn ((tel/pr-signal-fn :edn) sig))]
|
sig*1 (enc/read-edn ((tel/pr-signal-fn {:pr-fn :edn}) sig))
|
||||||
|
sig*2 (enc/read-edn ((tel/pr-signal-fn) sig))]
|
||||||
|
|
||||||
|
[(is (= sig*1 sig*2) "Default :pr-fn is :edn")
|
||||||
(is
|
(is
|
||||||
(enc/submap? sig*
|
(enc/submap? sig*1
|
||||||
{:schema 1, :kind :event, :id ::ev-id, :level :info,
|
{:schema 1, :kind :event, :id ::ev-id, :level :info,
|
||||||
:ns "taoensso.telemere-tests"
|
:ns "taoensso.telemere-tests"
|
||||||
:inst udt0
|
:inst udt0
|
||||||
:line pnat-int?
|
:line pnat-int?
|
||||||
:column pnat-int?}))))
|
:column pnat-int?}))]))
|
||||||
|
|
||||||
#?(:cljs
|
#?(:cljs
|
||||||
(testing ":json"
|
(testing ":json"
|
||||||
(let [sig* (enc/read-json ((tel/pr-signal-fn :json) sig))]
|
(let [sig* (enc/read-json ((tel/pr-signal-fn {:pr-fn :json}) sig))]
|
||||||
(is
|
(is
|
||||||
(enc/submap? sig*
|
(enc/submap? sig*
|
||||||
{"schema" 1, "kind" "event", "id" "taoensso.telemere-tests/ev-id",
|
{"schema" 1, "kind" "event", "id" "taoensso.telemere-tests/ev-id",
|
||||||
|
|
@ -712,7 +715,7 @@
|
||||||
"column" pnat-int?})))))
|
"column" pnat-int?})))))
|
||||||
|
|
||||||
(testing "user fn"
|
(testing "user fn"
|
||||||
(is (= ((tel/pr-signal-fn (fn [_] "str")) sig) (str "str" utils/newline))))]))
|
(is (= ((tel/pr-signal-fn {:pr-fn (fn [_] "str")}) sig) (str "str" utils/newline))))]))
|
||||||
|
|
||||||
(testing "format-signal-fn"
|
(testing "format-signal-fn"
|
||||||
(let [sig (with-sig (tel/event! ::ev-id {:inst t0}))]
|
(let [sig (with-sig (tel/event! ::ev-id {:inst t0}))]
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ To instead writes signals as edn:
|
||||||
;; Create console which writes edn
|
;; Create console which writes edn
|
||||||
(def my-handler
|
(def my-handler
|
||||||
(t/handler:console
|
(t/handler:console
|
||||||
{:output-fn (t/pr-signal-fn :edn)}))
|
{:output-fn (t/pr-signal-fn {:pr-fn :edn})}))
|
||||||
|
|
||||||
(my-handler my-signal) ; =>
|
(my-handler my-signal) ; =>
|
||||||
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
|
;; {:inst #inst "2024-04-11T10:54:57.202869Z", :msg_ "My message", :ns "examples", ...}
|
||||||
|
|
@ -91,8 +91,9 @@ To instead writes signals as JSON:
|
||||||
(t/handler:console
|
(t/handler:console
|
||||||
{:output-fn
|
{:output-fn
|
||||||
(t/pr-signal-fn
|
(t/pr-signal-fn
|
||||||
|
{:pr-fn
|
||||||
#?(:cljs :json
|
#?(:cljs :json
|
||||||
:clj jsonista.core/write-value-as-string))}))
|
:clj jsonista.core/write-value-as-string)})}))
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that when writing JSON with Clojure, you *must* provide an appropriate `pr-fn`. This lets you plug in the JSON serializer of your choice ([jsonista](https://github.com/metosin/jsonista) is my default recommendation).
|
Note that when writing JSON with Clojure, you *must* provide an appropriate `pr-fn`. This lets you plug in the JSON serializer of your choice ([jsonista](https://github.com/metosin/jsonista) is my default recommendation).
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue