[ https://issues.apache.org/jira/browse/LOG4J2-1973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16082491#comment-16082491 ]
Vina Martin commented on LOG4J2-1973: ------------------------------------- I tried to recreate this in a different way. I created a disk image and filled it up to near capacity then pointed my RollingFile appender to write to a log file in that disk. Upon startup of my program I still get this: {{2017-07-11 09:23:56,047 main ERROR appender Failover has no parameter that matches element Failovers}} however the RollingFile appender seems to be working and I verified I saw it writing to the file. When the file became full, when my configuration has: {code} <Loggers> <Root level="error"> <AppenderRef ref="Failover"/> </Root> </Loggers> {code} Failover seems to work. Not sure why the error message. > 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 > 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 (v6.4.14#64029)