Hello everyone.

I am trying to create my own appender using JPMS service in 3.0.0-beta3. This 
is my code:

import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.config.Property;
import org.apache.logging.log4j.plugins.Configurable;
import org.apache.logging.log4j.plugins.Plugin;

@Plugin("Foo")
@Configurable(elementType = Appender.ELEMENT_TYPE, printObject = true)
public class FooAppender extends AbstractAppender {

    public FooAppender(String name, Filter filter, Layout layout, boolean 
ignoreExceptions, Property[] properties) {
        super(name, filter, layout, ignoreExceptions, properties);
    }

    @Override
    public void append(LogEvent event) {
        System.out.println("Event:" + event.getMessage());
    }
}

import org.apache.logging.log4j.plugins.model.PluginEntry;
import org.apache.logging.log4j.plugins.model.PluginService;

public class PluginProvider extends PluginService {

    private static PluginEntry[] entries = new PluginEntry[] {
        PluginEntry.builder()
            .setKey("foo")
            .setClassName("com.foo.FooAppender")
            .setName("Foo")
            .setNamespace("Core")//I tried to use my namespace - it didn't help
            .setElementType("appender")
            .setPrintable(true)
            .get(),
    };

    @Override
    public PluginEntry[] getEntries() {
        System.out.println("ENTRIES OK"); // I didn't get this point
        return entries;
    }
}

module-info:

opens com.foo;
provides org.apache.logging.log4j.plugins.model.PluginService with 
com.foo.PluginProvider;

Config:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" shutdownHook="disable">
    <Appenders>
         <Foo name="Foo"/>
     </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Foo"/>
        </Root>
   </Loggers>
</Configuration>

Result:
Exception in thread "main" 
org.apache.logging.log4j.plugins.di.spi.ReflectionException
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.spi.ReflectionAgent.invokeMethod(ReflectionAgent.java:84)
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.DefaultInstanceFactory.lambda$registerBundleMethod$13(DefaultInstanceFactory.java:306)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.util.LazyUtil$SafeLazy.value(LazyUtil.java:113)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.util.Lazy.get(Lazy.java:39)
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.InstanceFactory.getInstance(InstanceFactory.java:126)
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.DefaultInstanceFactory.lambda$getArgumentFactory$9(DefaultInstanceFactory.java:223)
    at 
java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:212)
    at 
java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709)
    at 
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:556)
    at 
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:546)
    at 
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:622)
    at 
java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:291)
    at 
java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:631)
    at 
java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:637)
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.DefaultInstanceFactory.lambda$registerBundleMethod$13(DefaultInstanceFactory.java:305)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.util.LazyUtil$SafeLazy.value(LazyUtil.java:113)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.util.Lazy.get(Lazy.java:39)
    at 
org.apache.logging.log4j.plugins@3.0.0.beta3/org.apache.logging.log4j.plugins.di.InstanceFactory.getInstance(InstanceFactory.java:115)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:149)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.LoggerContext$Builder.build(LoggerContext.java:996)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.selector.AbstractContextSelector.createContext(AbstractContextSelector.java:42)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:231)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:149)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:132)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:126)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:151)
    at 
org.apache.logging.log4j.core@3.0.0.beta3/org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:49)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.LogManager.getContext(LogManager.java:138)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:136)
    at 
org.apache.logging.log4j.slf4j2.impl@2.24.1/org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:58)
    at 
org.apache.logging.log4j@2.24.1/org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at 
org.apache.logging.log4j.slf4j2.impl@2.24.1/org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:32)
    at org.slf4j@2.0.9/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:426)
    at org.slf4j@2.0.9/org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:451)

So, java dies in main class where I initializer my logger.
Could anyone say: 1) how to fix it 2) How to use custom Namespace for my 
appender in configuration?
For example, if I do PluginEntry.builder().setNamespace("FooNS")?

Best regards, Pavel

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

Reply via email to