Roger Kapsi created LOG4J2-1531:
-----------------------------------

             Summary: Change attribute and component values from String to 
Object
                 Key: LOG4J2-1531
                 URL: https://issues.apache.org/jira/browse/LOG4J2-1531
             Project: Log4j 2
          Issue Type: Improvement
          Components: Core
    Affects Versions: 2.6.2
            Reporter: Roger Kapsi


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.

{code:java}
(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")))
{code}

{code:java}
@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, ...);
  }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-dev-h...@logging.apache.org

Reply via email to