Created
December 15, 2020 23:17
-
-
Save hiredman/64bc7ee3e89dbdb3bb2d92c6bddf1ff6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defonce ^Logger logger (doto (Logger/getLogger "clojure") | |
(.setUseParentHandlers false) | |
(.addHandler | |
(doto (ConsoleHandler.) | |
(.setLevel Level/ALL) | |
(.setFormatter | |
(proxy [SimpleFormatter] [] | |
(format [^LogRecord record] | |
(let [sb (StringBuilder.)] | |
(.append sb "#:log{") | |
(.append sb ":z ") | |
(.append sb (pr-str (str (java.time.Instant/ofEpochMilli (.getMillis record))))) | |
;; (.append sb " :b ") | |
;; (.append sb (format "%02d" (.getSequenceNumber record))) | |
;; (.append sb " :c ") | |
;; (.append sb (format "%02d" (.getThreadID record))) | |
(.append sb " :v :") | |
(.append sb (.toLowerCase (.getName (.getLevel record)))) | |
(.append sb " :n ") | |
(.append sb (.getSourceClassName record)) | |
(.append sb " :l ") | |
(.append sb (.getSourceMethodName record)) | |
(.append sb " :m ") | |
(.append sb (pr-str (.getMessage record))) | |
(doseq [p (seq (.getParameters record)) | |
:when (map? p) | |
[k v] (seq p)] | |
(doto sb | |
(.append " ") | |
(cond-> | |
(namespace k) (.append (pr-str k)) | |
(not (namespace k)) (-> (.append ":_/") (.append (name k)))) | |
(.append " ") | |
(.append (pr-str v)))) | |
(when-let [t (.getThrown record)] | |
(.append sb " :thrown \n") | |
(.append sb (pr-str t))) | |
(.append sb "}\n") | |
(str sb))))))))) | |
(doseq [level '[severe warning info config fine finer finest]] | |
(intern *ns* | |
level | |
(fn | |
([&form &env msg] | |
(let [ns (name (ns-name *ns*))] | |
`(.logp logger ~(symbol "Level" (.toUpperCase (name level))) ~ns ~(str (:line (meta &form))) (print-str ~msg)))) | |
([&form &env msg parameters] | |
(let [ns (name (ns-name *ns*))] | |
`(let [p# ~parameters] | |
(if (map? p#) | |
(.logp logger | |
~(symbol "Level" (.toUpperCase (name level))) | |
~ns | |
~(str (:line (meta &form))) | |
(print-str ~msg) | |
p#) | |
(.logp logger | |
~(symbol "Level" (.toUpperCase (name level))) | |
~ns | |
~(str (:line (meta &form))) | |
(print-str ~msg) | |
^Throwable p#))))))) | |
(.setMacro ^clojure.lang.Var (ns-resolve *ns* level))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment