diff --git a/epl-v10.html b/epl-v10.html index 813c07d..4628213 100644 --- a/epl-v10.html +++ b/epl-v10.html @@ -11,7 +11,7 @@ margin: 0.25in 0.5in 0.25in 0.5in; tab-interval: 0.5in; } - p { + p { margin-left: auto; margin-top: 0.5em; margin-bottom: 0.5em; diff --git a/project.clj b/project.clj index 5f68ac8..23b1125 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject com.taoensso/timbre "0.5.1" +(defproject com.taoensso/timbre "0.5.2" :description "Simple, flexible, all-Clojure logging. No XML!" :url "https://github.com/ptaoussanis/timbre" :license {:name "Eclipse Public License"} @@ -16,4 +16,4 @@ :releases {:checksum :fail :update :always}}} :aliases {"all" ["with-profile" "1.3:1.4:1.5"]} :min-lein-version "2.0.0" - :warn-on-reflection true) \ No newline at end of file + :warn-on-reflection true) diff --git a/src/timbre/core.clj b/src/timbre/core.clj index b6ca8de..f25980a 100644 --- a/src/timbre/core.clj +++ b/src/timbre/core.clj @@ -5,7 +5,7 @@ [clj-stacktrace.repl :as stacktrace] [postal.core :as postal]) (:import [java.util Date Locale] - [java.text SimpleDateFormat])) + java.text.SimpleDateFormat)) ;;;; Default configuration and appenders @@ -71,13 +71,13 @@ ;; {:from "me@draines.com" :to "foo@example.com"} :postal nil}})) -(defn set-config! [[k & ks] val] (swap! config assoc-in (cons k ks) val)) -(defn set-level! [level] (set-config! [:current-level] level)) - ;;;; Define and sort logging levels -(def ^:private ordered-levels [:trace :debug :info :warn :error :fatal]) +(def ^:private ordered-levels [:trace :debug :info :warn :error :fatal :report]) (def ^:private scored-levels (zipmap ordered-levels (range))) +(defn check-level + [x] (when-not (some #{x} ordered-levels) + (throw (Exception. (str "Invalid logging level: " x))))) (def compare-levels (memoize (fn [x y] (- (scored-levels x) (scored-levels y))))) @@ -85,6 +85,14 @@ (defn sufficient-level? [level] (>= (compare-levels level (:current-level @config)) 0)) +;;;; Config helpers + +(defn set-config! [[k & ks] val] (swap! config assoc-in (cons k ks) val)) +(defn set-level! + [level] + (check-level level) + (set-config! [:current-level] level)) + ;;;; Appender-fn decoration (defn- make-timestamp-fn @@ -197,8 +205,9 @@ (defmacro log "Dispatches given arguments to relevant appender-fns iff logging level is sufficient." - {:arglists '([message & more] [throwable message & more])} + {:arglists '([level message & more] [level throwable message & more])} [level & args] + (check-level level) `(let [level# ~level] (when (sufficient-level? level#) (when-let [juxt-fn# (@juxt-cache level#)] ; Any relevant appenders? @@ -226,7 +235,7 @@ (log :trace "arg1")) (defmacro spy - "Evaluates expression and logs its form and result. Returns the result. + "Evaluates expression and logs its form and result. Always returns the result. Defaults to :debug logging level." ([expr] `(spy :debug ~expr)) ([level expr]