more context in slack: https://clojurians.slack.com/archives/C03S1KBA2/p1728938240053429
I'm using the MessageSupplier interface (https://logging.apache.org/log4j/2.x/javadoc/log4j-api/org/apache/logging/log4j/util/MessageSupplier.html) with log4j. And i'm coding like so:
❯ clj -Sdeps '{:deps {org.apache.logging.log4j/log4j-api {:mvn/version "2.23.1"} org.clojure/clojure {:mvn/version "1.12.0"}}}'
Clojure 1.12.0
user=> (let [^org.apache.logging.log4j.util.MessageSupplier supplier
(fn [_]
(org.apache.logging.log4j.message.MapMessage. {"stuff" "value"}))]
(.fatal (org.apache.logging.log4j.LogManager/getLogger)
supplier))
2024-10-14T20:45:25.707016Z main ERROR Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Execution error (ClassCastException) at user/eval134 (REPL:4).
class user$eval134$supplier__135 cannot be cast to class org.apache.logging.log4j.util.MessageSupplier (user$eval134$supplier__135 is in unnamed module of loader clojure.lang.DynamicClassLoader @2d7e1102; org.apache.logging.log4j.util.MessageSupplier is in unnamed module of loader 'app')
I was hoping to be able to use a function and take advantage of the new sugar in 1.12. The following does work for me though,
(let [^org.apache.logging.log4j.util.MessageSupplier supplier
(reify org.apache.logging.log4j.util.MessageSupplier
(get [_]
(org.apache.logging.log4j.message.MapMessage. {"stuff" "value"})))]
(.fatal (org.apache.logging.log4j.LogManager/getLogger)
supplier))
nil
;; and in terminal
2024-10-14 21:37:41,491 FATAL user$eval189307 :: stuff="value"