[
https://issues.apache.org/jira/browse/LOG4J2-1973?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ralph Goers reassigned LOG4J2-1973:
-----------------------------------
Assignee: Ralph Goers
> FailoverAppenders fail to start
> -------------------------------
>
> Key: LOG4J2-1973
> URL: https://issues.apache.org/jira/browse/LOG4J2-1973
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.8.2
> Reporter: Vina Martin
> Assignee: Ralph Goers
> Priority: Critical
>
> I created a simple Hello World program with Log4j2 2.8.2 following the
> documentation.
> {code}
> 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!");
> }
> }
> {code}
> with the following configuration in {{log4j2.xml}}
> {code}
> <?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>
> {code}
> 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:
> {code}
> 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
> {code}
> It appears to me that it was about to use the failover appender, however it
> did not start properly due to the parsing error.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)