mirror of
https://github.com/taoensso/telemere.git
synced 2026-01-01 15:28:25 +00:00
[new] Add :end-with-newline opt to signal formatters
Instead allow format-signal-fn to decide whether or not to end with a newline
This commit is contained in:
parent
49b6da2cf2
commit
c5333faa03
4 changed files with 43 additions and 22 deletions
|
|
@ -42,7 +42,7 @@
|
|||
(let [^java.io.Writer stream
|
||||
(or stream (if (error-signal? signal) *err* *out*))]
|
||||
(when-let [output (format-signal-fn signal)]
|
||||
(.write stream (str output nl))
|
||||
(.write stream (str output))
|
||||
(.flush stream))))))))
|
||||
|
||||
:cljs
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
([signal]
|
||||
(when-let [output (format-signal-fn signal)]
|
||||
(let [logger (js-console-logger (get signal :level))]
|
||||
(.call logger logger (str output nl)))))))))))
|
||||
(.call logger logger (str output)))))))))))
|
||||
|
||||
#?(:cljs
|
||||
(defn- logger-fn [logger]
|
||||
|
|
|
|||
|
|
@ -363,8 +363,7 @@
|
|||
([] (locking lock (fw))) ; Close writer
|
||||
([signal]
|
||||
(when-let [output (format-signal-fn signal)]
|
||||
(let [output-str (str output utils/newline)
|
||||
new-interval? (when interval (new-interval!?))
|
||||
(let [new-interval? (when interval (new-interval!?))
|
||||
>max-file-size? (when max-file-size (>max-file-size?))
|
||||
reset-stream? (or new-interval? >max-file-size?)]
|
||||
|
||||
|
|
@ -387,7 +386,7 @@
|
|||
max-num-parts gzip-archives? nil)))
|
||||
|
||||
(when reset-stream? (fw :writer/reset!))
|
||||
(do (fw output-str))))))))))
|
||||
(do (fw output))))))))))
|
||||
|
||||
(comment
|
||||
(manage-test-files! :create)
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
([] (sw)) ; Shut down
|
||||
([signal]
|
||||
(when-let [output (format-signal-fn signal)]
|
||||
(sw (str output utils/newline))))))))
|
||||
(sw output)))))))
|
||||
|
||||
(defn handler:udp-socket
|
||||
"Experimental, subject to change. Feedback welcome!
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
([] (.close socket)) ; Shut down
|
||||
([signal]
|
||||
(when-let [output (format-signal-fn signal)]
|
||||
(let [ba (enc/str->utf8-ba (str output utils/newline))
|
||||
(let [ba (enc/str->utf8-ba (str output))
|
||||
ba-len (alength ba)
|
||||
packet (DatagramPacket. ba (min ba-len max-packet-bytes))]
|
||||
|
||||
|
|
|
|||
|
|
@ -545,14 +545,20 @@
|
|||
- Takes a Telemere signal.
|
||||
- Returns edn string of the (minified) signal."
|
||||
([] (format-signal->edn-fn nil))
|
||||
([{:keys [pr-edn-fn prep-fn]
|
||||
([{:keys [pr-edn-fn prep-fn end-with-newline?]
|
||||
:or
|
||||
{pr-edn-fn pr-edn
|
||||
prep-fn (comp error-in-signal->maps minify-signal)}}]
|
||||
prep-fn (comp error-in-signal->maps minify-signal)
|
||||
end-with-newline? true}}]
|
||||
|
||||
(fn format-signal->edn [signal]
|
||||
(let [signal* (if prep-fn (prep-fn signal) signal)]
|
||||
(pr-edn-fn signal*)))))
|
||||
(let [nl newline]
|
||||
(fn format-signal->edn [signal]
|
||||
(let [signal* (if prep-fn (prep-fn signal) signal)
|
||||
output (pr-edn-fn signal*)]
|
||||
|
||||
(if end-with-newline?
|
||||
(str output nl)
|
||||
(do output)))))))
|
||||
|
||||
(comment ((format-signal->edn-fn) {:level :info, :msg "msg"}))
|
||||
|
||||
|
|
@ -562,20 +568,31 @@
|
|||
- Takes a Telemere signal.
|
||||
- Returns JSON string of the (minified) signal.
|
||||
|
||||
(Clj only): An appropriate `:pr-json-fn` MUST be provided."
|
||||
(Clj only): An appropriate `:pr-json-fn` MUST be provided.
|
||||
jsonista is one good option, Ref. <https://github.com/metosin/jsonista>:
|
||||
|
||||
(require '[jsonista.core :as jsonista])
|
||||
(format-signal->json-fn {:pr-json-fn jsonista/write-value-as-string ...})"
|
||||
|
||||
([] (format-signal->json-fn nil))
|
||||
([{:keys [pr-json-fn prep-fn]
|
||||
([{:keys [pr-json-fn prep-fn end-with-newline?]
|
||||
:or
|
||||
{#?@(:cljs [pr-json-fn pr-json])
|
||||
prep-fn (comp error-in-signal->maps minify-signal)}}]
|
||||
prep-fn (comp error-in-signal->maps minify-signal)
|
||||
end-with-newline? true}}]
|
||||
|
||||
(when-not pr-json-fn
|
||||
(throw
|
||||
(ex-info (str "No `" `format-signal->json-fn "` `:pr-json-fn` was provided") {})))
|
||||
|
||||
(fn format-signal->json [signal]
|
||||
(let [signal* (if prep-fn (prep-fn signal) signal)]
|
||||
(pr-json-fn signal*)))))
|
||||
(let [nl newline]
|
||||
(fn format-signal->json [signal]
|
||||
(let [signal* (if prep-fn (prep-fn signal) signal)
|
||||
output (pr-json-fn signal*)]
|
||||
|
||||
(if end-with-newline?
|
||||
(str output nl)
|
||||
(do output)))))))
|
||||
|
||||
(comment ((format-signal->json-fn) {:level :info, :msg "msg"}))
|
||||
|
||||
|
|
@ -585,15 +602,19 @@
|
|||
- Takes a Telemere signal.
|
||||
- Returns a formatted string intended for text consoles, etc."
|
||||
([] (format-signal->str-fn nil))
|
||||
([{:keys [format-signal->prelude-fn
|
||||
format-nsecs-fn format-error-fn]
|
||||
([{:keys
|
||||
[format-signal->prelude-fn
|
||||
format-nsecs-fn format-error-fn
|
||||
end-with-newline?]
|
||||
|
||||
:or
|
||||
{format-signal->prelude-fn (format-signal->prelude-fn) ; (fn [signal])
|
||||
format-nsecs-fn (format-nsecs-fn) ; (fn [nanosecs])
|
||||
format-error-fn (format-error-fn) ; (fn [error])
|
||||
}}]
|
||||
end-with-newline? true}}]
|
||||
|
||||
(let [signal-content-handler ; (fn [signal hf vf]
|
||||
(let [nl newline
|
||||
signal-content-handler ; (fn [signal hf vf]
|
||||
(signal-content-handler
|
||||
{:format-nsecs-fn format-nsecs-fn
|
||||
:format-error-fn format-error-fn})]
|
||||
|
|
@ -605,6 +626,7 @@
|
|||
|
||||
(when-let [ff format-signal->prelude-fn] (s+ (ff signal))) ; Prelude
|
||||
(signal-content-handler signal s++ enc/pr-edn*) ; Content
|
||||
(when end-with-newline? (enc/sb-append sb nl))
|
||||
(str sb))))))
|
||||
|
||||
(comment
|
||||
|
|
|
|||
Loading…
Reference in a new issue