/src/re_frame/loggers.cljc

https://github.com/Day8/re-frame · Clojure · 51 lines · 42 code · 7 blank · 2 comment · 4 complexity · 0b55bef7dd0f88fbfd87e84652e000a3 MD5 · raw file

  1. (ns re-frame.loggers
  2. (:require
  3. [clojure.set :refer [difference]]
  4. #?@(:clj [[clojure.string :as str]
  5. [clojure.tools.logging :as log]])))
  6. #?(:clj (defn log [level & args]
  7. (log/log level (if (= 1 (count args))
  8. (first args)
  9. (str/join " " args)))))
  10. ;; XXX should loggers be put in the registrar ??
  11. (def ^:private loggers
  12. "Holds the current set of logging functions.
  13. By default, re-frame uses the functions provided by js/console.
  14. Use `set-loggers!` to change these defaults
  15. "
  16. (atom #?(:cljs {:log (js/console.log.bind js/console)
  17. :warn (js/console.warn.bind js/console)
  18. :error (js/console.error.bind js/console)
  19. :debug (js/console.debug.bind js/console)
  20. :group (if (.-group js/console) ;; console.group does not exist < IE 11
  21. (js/console.group.bind js/console)
  22. (js/console.log.bind js/console))
  23. :groupEnd (if (.-groupEnd js/console) ;; console.groupEnd does not exist < IE 11
  24. (js/console.groupEnd.bind js/console)
  25. #())})
  26. ;; clojure versions
  27. #?(:clj {:log (partial log :info)
  28. :warn (partial log :warn)
  29. :error (partial log :error)
  30. :debug (partial log :debug)
  31. :group (partial log :info)
  32. :groupEnd #()})))
  33. (defn console
  34. [level & args]
  35. (assert (contains? @loggers level) (str "re-frame: log called with unknown level: " level))
  36. (apply (level @loggers) args))
  37. (defn set-loggers!
  38. [new-loggers]
  39. (assert (empty? (difference (set (keys new-loggers)) (-> @loggers keys set))) "Unknown keys in new-loggers")
  40. (swap! loggers merge new-loggers))
  41. (defn get-loggers
  42. "Get the current logging functions used by re-frame."
  43. []
  44. @loggers)