Does the jar containing the BWLogFileAppender contain a Log4j2Plugins.data file 
under the META-INF directory? If not are you compiling your code with 
annotation processing enabled?

Ralph



> On Jul 1, 2021, at 11:29 PM, Nilay Prafulla Dhamecha 
> <[email protected]> wrote:
> 
> I am migrating the log4j library from 1.2.17 to 2.14.1 and facing issues
> with the custom appenders.
> I have tried all the other solutions for the problem that I could find with
> regards to syntax, classloader, using the 'packages' attribute. But I am
> still unable to initialize the custom appender.
> 
> Please let me know what am I doing wrong here. Pasting the config files
> below
> 
> 
> 
> *Here is my custom Appender:*
> 
>    @Plugin(name = "BWLogFile", category = Core.CATEGORY_NAME, elementType
> = AbstractAppender.ELEMENT_TYPE)
>        public class BWLogFileAppender extends AbstractAppender {
> 
>            private BWLogFileAppender(String name, Filter filter,
>                    Layout<? extends Serializable> layout, final boolean
> ignoreExceptions) {
>                super(name, filter, layout, ignoreExceptions);
>            }
> 
> 
>            public void append(LogEvent event)    {
>                //custom code here
>            }
> 
>            @PluginFactory
>            public static BWLogFileAppender createAppender(
>                    @PluginAttribute("name") String name,
>                    @PluginElement("Layout") Layout<? extends Serializable>
> layout,
>                    @PluginElement("Filter") final Filter filter) {
>                if (name == null) {
>                    LOGGER.error("No name provided for BWLogFileAppender");
>                    return null;
>                }
>                if (layout == null) {
>                    layout = PatternLayout.createDefaultLayout();
>                }
>                return new BWLogFileAppender(name, filter, layout, true);
>            }}
> 
> *Here is my XML File :*
> 
>    <?xml version="1.0" encoding="UTF-8"?>
> 
>    <configuration status="trace" packages="com.share.util">
>        <properties>
>            <property name="log-pattern">"%d{HH:mm:ss.SSS} [%t] %-5level
> %logger{36} %msg%n"</property>
>        </properties>
> 
>      <appenders>
>          <BWLogFile name="bw_log">
>              <PatternLayout pattern="%msg%n" />
>          </BWLogFile>
> 
>          <console name="bw_console" target="SYSTEM_OUT">
>              <patternLayout>
>                    <pattern>${log-pattern}</pattern>
>                </patternLayout>
>          </console>
>      </appenders>
> 
>      <loggers>
>        <logger name="httpclient.wire" level="warn">
>           <AppenderRef ref="bw_console"/>
>        </logger>
> 
> 
>       <logger name="org.apache.http.wire" level="debug">
>          <AppenderRef ref="bw_log"/>
>       </logger>
> 
> 
>        <root level="warn">
>          <AppenderRef ref="bw_console" />
>        </root>
> 
>    </loggers>
> 
>   </configuration>
> 
> *Here is my properties file :*
> 
>    #Define
>    status = trace
>    name = PropertiesConfig
>    appenders = bw_console,bw_log
> 
>    #Package to search for Custom Appenders
>    packages = com.share.util
> 
>    #Appenders
>    appender.bw_console.type = Console
>    appender.bw_console.name = bw_console
>    appender.bw_console.target = SYSTEM_OUT
>    appender.bw_console.layout.type = PatternLayout
>    appender.bw_console.layout.pattern = %d{yyyy MMM dd HH:mm:ss:SSS z}
> %X{engine} %X{role} %m %n
> 
>    appender.bw_log.type = BWLogFile
>    appender.bw_log.name = bw_log
>    appender.bw_log.layout.type = PatternLayout
>    appender.bw_log.layout.pattern = %msg%n
> 
> 
>    #Root-Logger
>    rootLogger.level = WARN
>    rootLogger.appenderRef.bw_console.ref = bw_console
> 
> 
>    #HttpClient Logger
>    logger.bw_console.name = httpclient.wire
>    logger.bw_console.level = WARN
>    logger.bw_console.appenderRef.bw_console.ref = bw_console
> 
> 
>    logger.bw_log.name = org.apache.http.wire
>    logger.bw_log.level = DEBUG
>    logger.bw_log.appenderRef.bw_log.ref = bw_log
> 
> 
> *I am initializing the log4j via the below code :*
> 
>    private void initlog4j2System() {
>              String log4jConfigFile = "URI/to/log4j2.xml";
>              ConfigurationSource source = null;
>              try {
>                  source = new ConfigurationSource(new
> FileInputStream(log4jConfigFile)); //for XML file
>                  //source = new ConfigurationSource(new
> FileInputStream(log4jConfigFile), new File(log4jConfigFile));  //for
> properties file
>              } catch (FileNotFoundException e) {
>                  System.out.println(e.getStackTrace());
>              } catch (IOException e) {
>                  System.out.println(e.getStackTrace());
>              }
>              Configurator.initialize(null, source);
>          }
> 
> 
> *The error that I am getting when I initialize via XML is :*
> 
>    Error processing element BWLogFile ([appenders: null]): CLASS_NOT_FOUND
> 
> *The error I am getting when I initialize via properties file is :*
> 
>    2021-06-30 18:27:59,879 main ERROR Unable to locate plugin for BWLogFile
>    2021-06-30 18:27:59,880 main DEBUG Building Plugin[name=appenders,
> class=org.apache.logging.log4j.core.config.AppendersPlugin].
>    2021-06-30 18:27:59,882 main ERROR Unable to invoke factory method in
> class org.apache.logging.log4j.core.config.AppendersPlugin for element
> Appenders: java.lang.NullPointerException java.lang.NullPointerException
>            at
> org.apache.logging.log4j.core.config.plugins.visitors.PluginElementVisitor.visit(PluginElementVisitor.java:52)
>            at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.generateParameters(PluginBuilder.java:258)
>            at
> org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:135)
>            at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1000)
>            at
> org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:940)
>            at
> org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:551)
>            at
> org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:241)
>            at
> org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:287)
>            at
> org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:627)
>            at
> org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:700)
>            at
> org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:717)
>            at
> org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:272)
>            at
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
>            at
> org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
>            at
> org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)
>            at
> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:137)
>            at
> org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:45)
>            at
> org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
>            at
> org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:30)
>            at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)


Reply via email to