mirror of
https://github.com/status-im/timbre.git
synced 2025-02-17 22:27:10 +00:00
Add default ClojureScript console appender
This commit is contained in:
parent
beec0c9fdd
commit
502ff97d26
18
project.clj
18
project.clj
@ -56,27 +56,15 @@
|
|||||||
{:source-paths ["src" "test"] :rules :cljs :output-path "target/test-classes"}]}
|
{:source-paths ["src" "test"] :rules :cljs :output-path "target/test-classes"}]}
|
||||||
|
|
||||||
:cljsbuild
|
:cljsbuild
|
||||||
{:test-commands {"node" ["node" :node-runner "target/tests.js"]
|
{:test-commands {"node" ["node" :node-runner "target/tests.js"]
|
||||||
;; "phantom" ["phantomjs" :runner "target/tests.js"]
|
"phantom" ["phantomjs" :runner "target/tests.js"]}
|
||||||
}
|
|
||||||
:builds
|
:builds
|
||||||
;; TODO Parallel builds currently cause issues with Expectations v2.1.0,
|
|
||||||
;; Ref. http://goo.gl/8LDHe5
|
|
||||||
[{:id "main"
|
[{:id "main"
|
||||||
:source-paths ["src" "target/classes"]
|
:source-paths ["src" "target/classes"]
|
||||||
;; :notify-command ["terminal-notifier" "-title" "cljsbuild" "-message"]
|
;; :notify-command ["terminal-notifier" "-title" "cljsbuild" "-message"]
|
||||||
:compiler {:output-to "target/main.js"
|
:compiler {:output-to "target/main.js"
|
||||||
:optimizations :advanced
|
:optimizations :advanced
|
||||||
:pretty-print false}}
|
:pretty-print false}}]}
|
||||||
{:id "tests"
|
|
||||||
:source-paths ["src" "target/classes" "test" "target/test-classes"]
|
|
||||||
:notify-command ["node" "target/tests.js"]
|
|
||||||
:compiler {:output-to "target/tests.js"
|
|
||||||
:optimizations :simple ; Necessary for node.js
|
|
||||||
:pretty-print true
|
|
||||||
:target :nodejs
|
|
||||||
:hashbang false ; Ref. http://goo.gl/vrtNDR
|
|
||||||
:main "taoensso.encore.tests"}}]}
|
|
||||||
|
|
||||||
:auto-clean false
|
:auto-clean false
|
||||||
:prep-tasks [["cljx" "once"] "javac" "compile"]
|
:prep-tasks [["cljx" "once"] "javac" "compile"]
|
||||||
|
@ -6,14 +6,13 @@
|
|||||||
[taoensso.encore :as enc :refer (have have? qb)])
|
[taoensso.encore :as enc :refer (have have? qb)])
|
||||||
#+cljs (:require [clojure.string :as str]
|
#+cljs (:require [clojure.string :as str]
|
||||||
[taoensso.encore :as enc :refer ()])
|
[taoensso.encore :as enc :refer ()])
|
||||||
#+cljs (:require-macros [taoensso.encore :as enc :refer (have have?)])
|
#+cljs (:require-macros [taoensso.encore :as enc :refer (have have?)]
|
||||||
|
[taoensso.timbre :as timbre-macros :refer ()])
|
||||||
#+clj (:import [java.util Date Locale]
|
#+clj (:import [java.util Date Locale]
|
||||||
[java.text SimpleDateFormat]
|
[java.text SimpleDateFormat]
|
||||||
[java.io File]))
|
[java.io File]))
|
||||||
|
|
||||||
;;;; TODO
|
;;;; TODO
|
||||||
;; - Check for successful cljs compile
|
|
||||||
;; - Cljs default appenders
|
|
||||||
;; - Try ease backward comp, update README, CHANGELOG
|
;; - Try ease backward comp, update README, CHANGELOG
|
||||||
;; - Document shutdown-agents,
|
;; - Document shutdown-agents,
|
||||||
;; Ref. https://github.com/ptaoussanis/timbre/pull/100/files
|
;; Ref. https://github.com/ptaoussanis/timbre/pull/100/files
|
||||||
@ -150,7 +149,31 @@
|
|||||||
(when-let [fname (enc/as-?nblank spit-filename)]
|
(when-let [fname (enc/as-?nblank spit-filename)]
|
||||||
(try (ensure-spit-dir-exists! fname)
|
(try (ensure-spit-dir-exists! fname)
|
||||||
(spit fname (str (output-fn data) "\n") :append true)
|
(spit fname (str (output-fn data) "\n") :append true)
|
||||||
(catch java.io.IOException _)))))}}}))
|
(catch java.io.IOException _)))))}}
|
||||||
|
|
||||||
|
#+cljs
|
||||||
|
{:console
|
||||||
|
{:doc "Logs to js/console when it exists. Enabled by default."
|
||||||
|
:min-level nil :enabled? true :async? false :rate-limit nil
|
||||||
|
:opts {}
|
||||||
|
:fn
|
||||||
|
(let [have-logger? (and (exists? js/console) (.-log js/console))
|
||||||
|
have-warn-logger? (and have-logger? (.-warn js/console))
|
||||||
|
have-error-logger? (and have-logger? (.-error js/console))
|
||||||
|
adjust-level {:fatal (if have-error-logger? :error :info)
|
||||||
|
:error (if have-error-logger? :error :info)
|
||||||
|
:warn (if have-warn-logger? :warn :info)}]
|
||||||
|
(if-not have-logger?
|
||||||
|
(fn [data] nil)
|
||||||
|
(fn [data]
|
||||||
|
(let [{:keys [level appender-opts output-fn]} data
|
||||||
|
{:keys []} appender-opts
|
||||||
|
output (output-fn data)]
|
||||||
|
|
||||||
|
(case (adjust-level level)
|
||||||
|
:error (.error js/console output)
|
||||||
|
:warn (.warn js/console output)
|
||||||
|
(.log js/console output))))))}}}))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(set-config! example-config)
|
(set-config! example-config)
|
||||||
@ -269,6 +292,7 @@
|
|||||||
|
|
||||||
(comment (default-data-hash-fn {}))
|
(comment (default-data-hash-fn {}))
|
||||||
|
|
||||||
|
#+clj
|
||||||
(enc/defonce* ^:private get-agent
|
(enc/defonce* ^:private get-agent
|
||||||
(enc/memoize_ (fn [appender-id] (agent nil :error-mode :continue))))
|
(enc/memoize_ (fn [appender-id] (agent nil :error-mode :continue))))
|
||||||
|
|
||||||
@ -383,7 +407,8 @@
|
|||||||
|
|
||||||
(if-not async?
|
(if-not async?
|
||||||
(apfn data) ; Allow errors to throw
|
(apfn data) ; Allow errors to throw
|
||||||
(send-off (get-agent id) (fn [_] (apfn data)))))))
|
#+cljs (apfn data)
|
||||||
|
#+clj (send-off (get-agent id) (fn [_] (apfn data)))))))
|
||||||
nil
|
nil
|
||||||
(enc/clj1098 (:appenders config))))))
|
(enc/clj1098 (:appenders config))))))
|
||||||
nil)
|
nil)
|
||||||
@ -405,25 +430,25 @@
|
|||||||
;; TODO Waiting on http://dev.clojure.org/jira/browse/CLJ-865:
|
;; TODO Waiting on http://dev.clojure.org/jira/browse/CLJ-865:
|
||||||
?line (:line (meta &form))]
|
?line (:line (meta &form))]
|
||||||
`(log* ~config ~level ~ns-str ~?file ~?line ~msg-type
|
`(log* ~config ~level ~ns-str ~?file ~?line ~msg-type
|
||||||
(delay ~(vec args)) ~base-data)))))
|
(delay [~@args]) ~base-data)))))
|
||||||
|
|
||||||
(defmacro ^:private def-logger [level]
|
;;; Log using print-style args
|
||||||
(let [level-name (name level)]
|
(defmacro trace [& args] `(log *config* :trace :print ~args))
|
||||||
`(do
|
(defmacro debug [& args] `(log *config* :debug :print ~args))
|
||||||
(defmacro ~(symbol (str level-name #_"p"))
|
(defmacro info [& args] `(log *config* :info :print ~args))
|
||||||
~(str "Logs at " level " level using print-style args.")
|
(defmacro warn [& args] `(log *config* :warn :print ~args))
|
||||||
~'{:arglists '([& message] [error & message])}
|
(defmacro error [& args] `(log *config* :error :print ~args))
|
||||||
[& sigs#] `(log *config* ~~level :print ~sigs#))
|
(defmacro fatal [& args] `(log *config* :fatal :print ~args))
|
||||||
|
(defmacro report [& args] `(log *config* :report :print ~args))
|
||||||
|
|
||||||
(defmacro ~(symbol (str level-name "f"))
|
;;; Log using format-style args
|
||||||
~(str "Logs at " level " level using format-style args.")
|
(defmacro tracef [& args] `(log *config* :trace :format ~args))
|
||||||
~'{:arglists '([fmt & fmt-args] [error fmt & fmt-args])}
|
(defmacro debugf [& args] `(log *config* :debug :format ~args))
|
||||||
[& sigs#] `(log *config* ~~level :format ~sigs#)))))
|
(defmacro infof [& args] `(log *config* :info :format ~args))
|
||||||
|
(defmacro warnf [& args] `(log *config* :warn :format ~args))
|
||||||
(defmacro def-loggers []
|
(defmacro errorf [& args] `(log *config* :error :format ~args))
|
||||||
`(do ~@(map (fn [level] `(def-logger ~level)) ordered-levels)))
|
(defmacro fatalf [& args] `(log *config* :fatal :format ~args))
|
||||||
|
(defmacro reportf [& args] `(log *config* :report :format ~args))
|
||||||
(def-loggers)
|
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(infof "hello %s" "world")
|
(infof "hello %s" "world")
|
||||||
@ -524,5 +549,5 @@
|
|||||||
|
|
||||||
(defmacro sometimes "Handy for sampled logging, etc."
|
(defmacro sometimes "Handy for sampled logging, etc."
|
||||||
[probability & body]
|
[probability & body]
|
||||||
`(do (assert (<= 0 ~probability 1) "Probability: 0 <= p <= 1")
|
`(do (assert (<= 0 ~probability 1) "Probability: 0 <= p <= 1")
|
||||||
(when (< (rand) ~probability) ~@body)))
|
(when (< (rand) ~probability) ~@body)))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user