Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-1973

FailoverAppenders fail to start

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Critical
    • Resolution: Unresolved
    • 2.8.2
    • None
    • Appenders
    • None

    Description

      I created a simple Hello World program with Log4j2 2.8.2 following the documentation.

      import org.apache.logging.log4j.LogManager;
      import org.apache.logging.log4j.Logger;
      
      public class HelloWorld {
      
          private static final Logger logger = LogManager.getLogger(HelloWorld.class);
      
          public static void main(final String... args) {
              logger.error("A test error- hello world!");
          }
      }
      

      with the following configuration in log4j2.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <Configuration status="WARN">
          <Appenders>
              <Console name="Console" target="SYSTEM_OUT">
                  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
              </Console>
              <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"
                           ignoreExceptions="false">
                  <PatternLayout>
                      <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                  </PatternLayout>
                  <TimeBasedTriggeringPolicy />
              </RollingFile>
              <Failover name="Failover" primary="RollingFile">
                  <Failovers>
                      <AppenderRef ref="Console"/>
                  </Failovers>
              </Failover>
          </Appenders>
          <Loggers>
              <Root level="error">
                  <AppenderRef ref="Failover"/>
              </Root>
          </Loggers>
      </Configuration>
      

      I get this error when starting up my program: ERROR appender Failover has no parameter that matches element Failovers. I observed that the hello world message appeared in the log file and was properly appended each time I ran my hello world program.

      Then, I tried to simulate a scenario where a failover would happen to verify that the failover appender is not starting properly. I locked the log file to be read-only. After locking the file I ran the program and saw the following output:

      2017-07-10 08:52:25,802 main ERROR RollingFileManager (logs/app.log) java.io.FileNotFoundException: logs/app.log (Permission denied) java.io.FileNotFoundException: logs/app.log (Permission denied)
      	at java.io.FileOutputStream.open0(Native Method)
      	at java.io.FileOutputStream.open(FileOutputStream.java:270)
      	at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
      	at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
      	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:587)
      	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:554)
      	at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:112)
      	at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
      	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:155)
      	at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:131)
      	at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60)
      	at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
      	at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
      	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
      	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
      	at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
      	at HelloWorld.<clinit>(HelloWorld.java:10)
      
      2017-07-10 08:52:25,810 main ERROR Unable to inject fields into builder class for plugin type class org.apache.logging.log4j.core.appender.RollingFileAppender, element RollingFile. java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@6c3708b3] unable to create manager for [logs/app.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@6f1fba17[pattern=logs/app-%d{MM-dd-yyyy}.log.gz, append=true, bufferedIO=true, bufferSize=8192, policy=TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), strategy=DefaultRolloverStrategy(min=1, max=7, useMax=true), advertiseURI=null, layout=%d %p %c{1.} [%t] %m%n]]
      	at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:114)
      	at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:114)
      	at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:155)
      	at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:131)
      	at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60)
      	at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
      	at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
      	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
      	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
      	at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
      	at HelloWorld.<clinit>(HelloWorld.java:10)
      
      2017-07-10 08:52:25,813 main ERROR Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile. java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender
      	at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:224)
      	at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:130)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:952)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:892)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:884)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:508)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:232)
      	at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:244)
      	at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
      	at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
      	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
      	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
      	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
      	at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:551)
      	at HelloWorld.<clinit>(HelloWorld.java:10)
      
      2017-07-10 08:52:25,815 main ERROR appender Failover has no parameter that matches element Failovers
      2017-07-10 08:52:25,816 main ERROR Null object returned for RollingFile in Appenders.
      2017-07-10 08:52:25,821 main ERROR Unable to locate primary Appender RollingFile
      2017-07-10 08:52:25,896 main ERROR Attempted to append to non-started appender Failover
      2017-07-10 08:52:25,897 main ERROR FailoverAppender Failover did not start successfully
      

      It appears to me that it was about to use the failover appender, however it did not start properly due to the parsing error.

      Attachments

        Activity

          People

            rgoers Ralph Goers
            vina.martin Vina Martin
            Votes:
            3 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated: