Skip to content

Instantly share code, notes, and snippets.

@eric
Last active December 22, 2015 06:39
Show Gist options
  • Save eric/6432496 to your computer and use it in GitHub Desktop.
Save eric/6432496 to your computer and use it in GitHub Desktop.
(def levels {:trace org.apache.log4j.Level/TRACE
:debug org.apache.log4j.Level/DEBUG
:info org.apache.log4j.Level/INFO
:warn org.apache.log4j.Level/WARN
:error org.apache.log4j.Level/ERROR
:fatal org.apache.log4j.Level/FATAL})
(defn set-level
"Set the level for the given logger, by string name. Use:
(set-level \"skuld.node\", :debug)"
([level]
(. (Logger/getRootLogger) (setLevel (levels level))))
([logger level]
(. (Logger/getLogger logger) (setLevel (levels level)))))
(defmacro suppress
"Turns off logging for the evaluation of body."
[loggers & body]
(to-level :fatal loggers body)
(defmacro to-level
"Sets logging for the evaluation of body to the desired level."
[level loggers & body]
(let [[logger & more] (flatten [loggers])]
(if logger
`(let [l4j-logger (Logger/getLogger ~logger)]
[old-level# (.getLevel l4j-logger)]
(try
(set-level ~logger level)
(to-level level ~more ~@body)
(finally
(.setLevel l4j-logger old-level#))))
`(do ~@body))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment