2016-07-20 08:57:46 +00:00
|
|
|
(ns re-frame.loggers
|
|
|
|
(:require
|
2016-07-21 07:08:38 +00:00
|
|
|
[clojure.set :refer [difference]]
|
|
|
|
#?@(:clj [[clojure.string :as str]
|
|
|
|
[clojure.tools.logging :as log]])))
|
|
|
|
|
2016-07-22 00:32:25 +00:00
|
|
|
#?(:clj (defn log [level & args]
|
|
|
|
(log/log level (if (= 1 (count args))
|
|
|
|
(first args)
|
|
|
|
(str/join " " args)))))
|
2016-07-20 08:57:46 +00:00
|
|
|
|
|
|
|
|
2016-08-04 12:20:23 +00:00
|
|
|
;; XXX should loggers be put in the registrar ??
|
2016-08-09 13:09:33 +00:00
|
|
|
(def ^:private loggers
|
|
|
|
"Holds the current set of logging functions.
|
|
|
|
By default, re-frame uses the functions provided by js/console.
|
|
|
|
Use `set-loggers!` to change these defaults
|
|
|
|
"
|
|
|
|
(atom #?(:cljs {:log (js/console.log.bind js/console)
|
|
|
|
:warn (js/console.warn.bind js/console)
|
|
|
|
:error (js/console.error.bind js/console)
|
|
|
|
:group (if (.-group js/console) ;; console.group does not exist < IE 11
|
|
|
|
(js/console.group.bind js/console)
|
|
|
|
(js/console.log.bind js/console))
|
|
|
|
:groupEnd (if (.-groupEnd js/console) ;; console.groupEnd does not exist < IE 11
|
|
|
|
(js/console.groupEnd.bind js/console)
|
|
|
|
#())})
|
|
|
|
;; clojure versions
|
|
|
|
#?(:clj {:log (partial log :info)
|
|
|
|
:warn (partial log :warn)
|
|
|
|
:error (partial log :error)
|
|
|
|
:group (partial log :info)
|
|
|
|
:groupEnd #()})))
|
2016-07-20 08:57:46 +00:00
|
|
|
|
|
|
|
(defn console
|
|
|
|
[level & args]
|
|
|
|
(assert (contains? @loggers level) (str "re-frame: log called with unknown level: " level))
|
|
|
|
(apply (level @loggers) args))
|
|
|
|
|
|
|
|
|
|
|
|
(defn set-loggers!
|
|
|
|
"Change the set (or a subset) of logging functions used by re-frame.
|
|
|
|
'new-loggers' should be a map which looks like default-loggers"
|
|
|
|
[new-loggers]
|
|
|
|
(assert (empty? (difference (set (keys new-loggers)) (-> @loggers keys set))) "Unknown keys in new-loggers")
|
|
|
|
(swap! loggers merge new-loggers))
|