Hi Ralph,
Thank you for your valuable reply.

   - We are using the log4j-core-2.14.1.jar as well as log4j-api-2.14.1.jar
   for the compilation as well as for the runtime support of Log4J2.14.1
   - Yes, the Log4j2Plugins.dat present inside the log4j-core-2.14.1.jar
   which we are using for compilation purposes.
   - The jar file that contains our custom inhouse BWLogFileAppender.java
   file doesn't contain the Log4j2Plugins.dat rather as mentioned in point 2
   above, log4j-core-2.14.1.jar  has this data file.
   - No, We are not compiling our code using the annotations processing
   enabled.

   Kindly let me know your valuable suggestion further. Please let me know
   if you need any additional information.

   Thanks in Advance,
   Ravi


On Sat, Jul 3, 2021 at 1:45 PM Ralph Goers <[email protected]>
wrote:

> 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