Came across this code in clojure.tools.logging

(defn cl-factory
  "Returns a Commons Logging-based implementation of the LoggerFactory
protocol, or
  nil if not available."
  []
  (try
    (Class/forName "org.apache.commons.logging.Log")
    (eval
      `(do
         (extend org.apache.commons.logging.Log
           Logger
           {: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#]
              (if e#
                (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#))))
                (condp = level#
                  :trace (.trace logger# msg#)
                  :debug (.debug logger# msg#)
                  :info  (.info  logger# msg#)
                  :warn  (.warn  logger# msg#)
                  :error (.error logger# msg#)
                  :fatal (.fatal logger# msg#)
                  (throw (IllegalArgumentException. (str
level#))))))})
         (reify LoggerFactory
           (name [_#]
             "org.apache.commons.logging")
           (get-logger [_# logger-ns#]
             (org.apache.commons.logging.LogFactory/getLog (str logger-
ns#))))))
    (catch Exception e nil)))

I do understand what it does with extend and reify but I am not clear
why eval is needed here.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to