From 5d71706efd0cc1d54cb94f8e89da4c56e9ff3072 Mon Sep 17 00:00:00 2001 From: Alexander Taggart Date: Thu, 29 Sep 2011 12:09:33 -0700 Subject: [PATCH] Fix broken protocol extension due to incompatibility between syntax-quote and extend-type. Add tests for all provided implementations. --- pom.xml | 27 +++++ src/main/clojure/clojure/tools/logging/impl.clj | 142 ++++++++++++----------- src/test/clojure/clojure/tools/test_logging.clj | 9 ++ src/test/clojure/log4j.properties | 4 + 4 files changed, 115 insertions(+), 67 deletions(-) create mode 100644 src/test/clojure/log4j.properties diff --git a/pom.xml b/pom.xml index 92eb9cb..4bfbd2d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,4 +21,31 @@ scm:git:git@github.com:clojure/tools.logging.git git@github.com:clojure/tools.logging.git + + + + org.slf4j + slf4j-api + 1.6.2 + test + + + org.slf4j + slf4j-log4j12 + 1.6.2 + test + + + log4j + log4j + 1.2.16 + test + + + commons-logging + commons-logging + 1.1.1 + test + + diff --git a/src/main/clojure/clojure/tools/logging/impl.clj b/src/main/clojure/clojure/tools/logging/impl.clj index 93306fa..76cb9c1 100644 --- a/src/main/clojure/clojure/tools/logging/impl.clj +++ b/src/main/clojure/clojure/tools/logging/impl.clj @@ -40,27 +40,29 @@ (Class/forName "org.slf4j.Logger") (eval `(do - (extend-type org.slf4j.Logger + (extend org.slf4j.Logger Logger - (enabled? [logger# level#] - (condp = level# - :trace (.isTraceEnabled logger#) - :debug (.isDebugEnabled logger#) - :info (.isInfoEnabled logger#) - :warn (.isWarnEnabled logger#) - :error (.isErrorEnabled logger#) - :fatal (.isErrorEnabled logger#) - (throw (IllegalArgumentException. (str level#))))) - (write! [^org.slf4j.Logger logger# level# ^Throwable e# msg#] - (let [^String msg# (str msg#)] - (condp = level# - :trace (.trace logger# msg# e#) - :debug (.debug logger# msg# e#) - :info (.info logger# msg# e#) - :warn (.warn logger# msg# e#) - :error (.error logger# msg# e#) - :fatal (.error logger# msg# e#) - (throw (IllegalArgumentException. (str level#))))))) + {:enabled? + (fn [logger# level#] + (condp = level# + :trace (.isTraceEnabled logger#) + :debug (.isDebugEnabled logger#) + :info (.isInfoEnabled logger#) + :warn (.isWarnEnabled logger#) + :error (.isErrorEnabled logger#) + :fatal (.isErrorEnabled logger#) + (throw (IllegalArgumentException. (str level#))))) + :write! + (fn [^org.slf4j.Logger logger# level# ^Throwable e# msg#] + (let [^String msg# (str msg#)] + (condp = level# + :trace (.trace logger# msg# e#) + :debug (.debug logger# msg# e#) + :info (.info logger# msg# e#) + :warn (.warn logger# msg# e#) + :error (.error logger# msg# e#) + :fatal (.error logger# msg# e#) + (throw (IllegalArgumentException. (str level#))))))}) (reify LoggerFactory (name [_#] "org.slf4j") @@ -76,26 +78,28 @@ (Class/forName "org.apache.commons.logging.Log") (eval `(do - (extend-type org.apache.commons.logging.Log + (extend org.apache.commons.logging.Log Logger - (enabled? [logger# level#] - (condp = level# - :trace (.isTraceEnabled logger#) - :debug (.isDebugEnabled logger#) - :info (.isInfoEnabled logger#) - :warn (.isWarnEnabled logger#) - :error (.isErrorEnabled logger#) - :fatal (.isFatalEnabled logger#) - (throw (IllegalArgumentException. (str level#))))) - (write! [logger# level# e# msg#] - (condp = level# - :trace (.trace logger# msg# e#) - :debug (.debug logger# msg# e#) - :info (.info logger# msg# e#) - :warn (.warn logger# msg# e#) - :error (.error logger# msg# e#) - :fatal (.fatal logger# msg# e#) - (throw (IllegalArgumentException. (str level#)))))) + {:enabled? + (fn [logger# level#] + (condp = level# + :trace (.isTraceEnabled logger#) + :debug (.isDebugEnabled logger#) + :info (.isInfoEnabled logger#) + :warn (.isWarnEnabled logger#) + :error (.isErrorEnabled logger#) + :fatal (.isFatalEnabled logger#) + (throw (IllegalArgumentException. (str level#))))) + :write! + (fn [logger# level# e# msg#] + (condp = level# + :trace (.trace logger# msg# e#) + :debug (.debug logger# msg# e#) + :info (.info logger# msg# e#) + :warn (.warn logger# msg# e#) + :error (.error logger# msg# e#) + :fatal (.fatal logger# msg# e#) + (throw (IllegalArgumentException. (str level#)))))}) (reify LoggerFactory (name [_#] "org.apache.commons.logging") @@ -116,20 +120,22 @@ :warn org.apache.log4j.Level/WARN :error org.apache.log4j.Level/ERROR :fatal org.apache.log4j.Level/FATAL}] - (extend-type org.apache.log4j.Logger + (extend org.apache.log4j.Logger Logger - (enabled? [logger# level#] - (.isEnabledFor logger# - (or - (levels# level#) - (throw (IllegalArgumentException. (str level#)))))) - (write! [logger# level# e# msg#] - (let [level# (or - (levels# level#) - (throw (IllegalArgumentException. (str level#))))] - (if-not e# - (.log logger# level# msg#) - (.log logger# level# msg# e#))))) + {:enabled? + (fn [logger# level#] + (.isEnabledFor logger# + (or + (levels# level#) + (throw (IllegalArgumentException. (str level#)))))) + :write! + (fn [logger# level# e# msg#] + (let [level# (or + (levels# level#) + (throw (IllegalArgumentException. (str level#))))] + (if-not e# + (.log logger# level# msg#) + (.log logger# level# msg# e#))))}) (reify LoggerFactory (name [_#] "org.apache.log4j") @@ -150,22 +156,24 @@ :warn java.util.logging.Level/WARNING :error java.util.logging.Level/SEVERE :fatal java.util.logging.Level/SEVERE}] - (extend-type java.util.logging.Logger + (extend java.util.logging.Logger Logger - (enabled? [logger# level#] - (.isLoggable logger# - (or - (levels# level#) - (throw (IllegalArgumentException. (str level#)))))) - (write! [logger# level# ^Throwable e# msg#] - (let [^java.util.logging.Level level# - (or - (levels# level#) - (throw (IllegalArgumentException. (str level#)))) - ^String msg# (str msg#)] - (if e# - (.log logger# level# msg# e#) - (.log logger# level# msg#))))) + {:enabled? + (fn [logger# level#] + (.isLoggable logger# + (or + (levels# level#) + (throw (IllegalArgumentException. (str level#)))))) + :write! + (fn [logger# level# ^Throwable e# msg#] + (let [^java.util.logging.Level level# + (or + (levels# level#) + (throw (IllegalArgumentException. (str level#)))) + ^String msg# (str msg#)] + (if e# + (.log logger# level# msg# e#) + (.log logger# level# msg#))))}) (reify LoggerFactory (name [_#] "java.util.logging") diff --git a/src/test/clojure/clojure/tools/test_logging.clj b/src/test/clojure/clojure/tools/test_logging.clj index 3e9d94a..79b48e4 100644 --- a/src/test/clojure/clojure/tools/test_logging.clj +++ b/src/test/clojure/clojure/tools/test_logging.clj @@ -3,6 +3,15 @@ clojure.tools.logging] [:require [clojure.tools.logging.impl :as impl]]) +(deftest test-impls + (are [lf] (binding [*logger-factory* lf] + (enabled? :fatal)) + (impl/slf4j-factory) + (impl/cl-factory) + (impl/log4j-factory) + (impl/jul-factory))) + + (def ^{:dynamic true} *entries* (atom [])) (defn test-factory [enabled-set] diff --git a/src/test/clojure/log4j.properties b/src/test/clojure/log4j.properties new file mode 100644 index 0000000..8ab8e03 --- /dev/null +++ b/src/test/clojure/log4j.properties @@ -0,0 +1,4 @@ +log4j.rootLogger=TRACE, A1 +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d %-5p %c: %m%n \ No newline at end of file -- 1.7.3.5