[ 
https://issues.apache.org/jira/browse/LOG4J2-1741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15760862#comment-15760862
 ] 

Mikael Ståldal commented on LOG4J2-1741:
----------------------------------------

I just tried to write a simple appender in Scala, and it worked without 
problems:

{code}
import org.apache.logging.log4j.core.appender.AbstractAppender
import org.apache.logging.log4j.core.config.plugins.{Plugin, PluginAttribute, 
PluginElement, PluginFactory}
import org.apache.logging.log4j.core.{Filter, Layout, LogEvent}

@Plugin(name = "Scala", category = "Core", elementType = "appender", 
printObject = true)
class ScalaAppender private(val name: String, val filter: Filter, val layout: 
Layout[_ <: Serializable]) extends AbstractAppender(name, filter, layout) {
  def append(event: LogEvent): Unit = {
    print("scala: " + new String(getLayout.toByteArray(event)))
  }
}

object ScalaAppender {
  @PluginFactory 
  def createAppender(@PluginAttribute("name") name: String, 
                     @PluginElement("Layout") layout: Layout[_ <: 
Serializable], 
                     @PluginElement("Filters") filter: Filter
                    ): ScalaAppender = {
    new ScalaAppender(name, filter, layout)
  }
}
{code}

Can you post some code of a non-working Scala appender?

> scala: add support for creating custom plugins
> ----------------------------------------------
>
>                 Key: LOG4J2-1741
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1741
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: Plugins
>            Reporter: PJ Fanning
>
> I tried to add a custom appender using Scala but the pattern of having a 
> class with an Plugin annotation and a static method on that class with a 
> PluginFactory or PluginBuilderFactory annotation doesn't seem to work in 
> Scala.
> In Scala, you can create a companion object to a class where you can 
> implement the equivalent of static methods but these are not the same class 
> under the hood. The Scala compiler builds 2 or more classes, the companion 
> object gets a class name with a $ appended to it. I think this is affecting 
> the lookup for the method with the Factory annotation.



--
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