Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
2.6.2
-
None
-
None
Description
I was looking into creating a ConfigurationFactory/Builder that is backed by a Clojure DSL. It works rather beautifully until I tried to create a filter that is backed by a Clojure function. There is literally no way to pass arbitrary objects into a PluginFactory. All component values and attributes are assumed to be Strings.
(configuration (appender "stdout" "CONSOLE" (layout "PatternLayout" (attribute "pattern" "%d [%t] %-5level: %msg%n")) (filter "ClojureFilter" ;; This LoC doesn't work: addAttribute(key, value) ;; will store the toString() of the value. Bummer. ;; I'd the so easy and beautiful if it didn't. (attribute "fn" (fn [logger & more] (println logger))))) (logger "TestLogger" Level/INFO (appender-ref "rolling") (attribute "additivity" false)) (root-logger Level/DEBUG (appender-ref "rolling")))
@Plugin(name = "ClojureFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true) class ClojureFilter extends AbstractFilter { @PluginFactory public static ClojureFilter createFilter( @PluginAttribute("fn") IFn fn, ...) { return new ClojureFilter(fn, ...); } }
Attachments
Attachments
Issue Links
- relates to
-
LOG4J2-2600 Declarative Groovy Configuration DSL
- Resolved