From c5333faa03d9c7830fc00ff98a59221842901a51 Mon Sep 17 00:00:00 2001 From: Peter Taoussanis Date: Fri, 3 May 2024 08:32:17 +0200 Subject: [PATCH] [new] Add `:end-with-newline` opt to signal formatters Instead allow format-signal-fn to decide whether or not to end with a newline --- src/taoensso/telemere/consoles.cljc | 4 +-- src/taoensso/telemere/files.clj | 5 ++- src/taoensso/telemere/sockets.clj | 4 +-- src/taoensso/telemere/utils.cljc | 52 ++++++++++++++++++++--------- 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/taoensso/telemere/consoles.cljc b/src/taoensso/telemere/consoles.cljc index 8b1d6ad..840cda8 100644 --- a/src/taoensso/telemere/consoles.cljc +++ b/src/taoensso/telemere/consoles.cljc @@ -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] diff --git a/src/taoensso/telemere/files.clj b/src/taoensso/telemere/files.clj index 29e1089..7c4a860 100644 --- a/src/taoensso/telemere/files.clj +++ b/src/taoensso/telemere/files.clj @@ -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) diff --git a/src/taoensso/telemere/sockets.clj b/src/taoensso/telemere/sockets.clj index 61b9203..5932054 100644 --- a/src/taoensso/telemere/sockets.clj +++ b/src/taoensso/telemere/sockets.clj @@ -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))] diff --git a/src/taoensso/telemere/utils.cljc b/src/taoensso/telemere/utils.cljc index 5711a14..fe87cf3 100644 --- a/src/taoensso/telemere/utils.cljc +++ b/src/taoensso/telemere/utils.cljc @@ -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. : + + (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