Details
-
Type:
Defect
-
Status:
Resolved
-
Priority:
Blocker
-
Resolution: Completed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
-
Patch:Code and Test
Description
Example of error when trying to call a Logger protocol function:
java.lang.IllegalArgumentException: No implementation of method: :enabled? of protocol: #'clojure.tools.logging.impl/Logger found for class: org.apache.log4j.Logger
The bug is the result of combining syntax-quoting with extend-type, e.g.:
`(do
(extend-type org.apache.commons.logging.Log
Logger
(enabled? [logger# level#] ... )))
The syntax-quote turns the above enabled? into clojure.tools.logging/enabled? protocol function name, and then the extend-type turns that into the keyword :clojure.tools.logging/enabled?, which does not match the expected :enabled?.
Attached patch fixes this by using extend maps rather than extend-type. Also adds some tests.
Committed:
https://github.com/clojure/tools.logging/commit/f9cb0a7232d3a11cb7e74e4c13c3adc054e7e7a2