[ https://issues.apache.org/jira/browse/LOG4J2-1908?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Remko Popma resolved LOG4J2-1908. --------------------------------- Resolution: Fixed Assignee: Remko Popma Fix Version/s: 2.9 Fixed in master. The above configuration now gives this error: {code} 2017-06-30 21:26:40,270 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile org.apache.logging.log4j.core.config.ConfigurationException: Configuration has multiple incompatible Appenders pointing to the same file target/multiIncompatibleAppender.log at org.apache.logging.log4j.core.appender.OutputStreamManager.narrow(OutputStreamManager.java:134) at org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.getRollingRandomAccessFileManager(RollingRandomAccessFileManager.java:104) at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender$Builder.build(RollingRandomAccessFileAppender.java:125) at org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender$Builder.build(RollingRandomAccessFileAppender.java:50) 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:958) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:239) at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:159) at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:131) at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:101) at org.apache.logging.log4j.junit.LoggerContextRule$1.evaluate(LoggerContextRule.java:119) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 2017-06-30 21:26:40,273 main ERROR Null object returned for RollingRandomAccessFile in Appenders. {code} > Cryptic error message when misconfigured with File and > RollingRandomAccessFile appenders targeting same file > ------------------------------------------------------------------------------------------------------------ > > Key: LOG4J2-1908 > URL: https://issues.apache.org/jira/browse/LOG4J2-1908 > Project: Log4j 2 > Issue Type: Improvement > Components: Configurators, Core > Reporter: Remko Popma > Assignee: Remko Popma > Fix For: 2.9 > > > When a configuration contains a FileAppender and a > RollingRandomAccessFileAppender that target the same file, the below error > occurs. > Admittedly the configuration is wrong, but the error message is misleading or > at least not helpful for users. Without intimate understanding of the Log4j > internals (how FileManagers work) it is almost impossible to determine that > the below error is caused by a misconfiguration, what the problem is and how > to fix it. > The configuration: > {code} > <?xml version="1.0" encoding="UTF-8"?> > <Configuration status="WARN"> > <properties> > <property name="pattern">%d{ISO8601} %r [%t] %-5level %logger{1.} - > %msg%n</property> > </properties> > <Appenders> > <Console name="CONSOLE" target="SYSTEM_OUT" follow="true"> > <PatternLayout pattern="${pattern}" /> > </Console> > <File name="FILE" fileName="logs/app.log"> > <PatternLayout pattern="${pattern}" /> > </File> > <RollingRandomAccessFile name="ROLLING" > fileName="logs/app.log" > filePattern="logs/%d{yyyyMMdd}/app-%i.log.gz"> > <PatternLayout pattern="${pattern}" /> > <Policies> > <OnStartupTriggeringPolicy/> > <SizeBasedTriggeringPolicy size="1 GB" /> > <TimeBasedTriggeringPolicy/> > </Policies> > <DefaultRolloverStrategy/> > </RollingRandomAccessFile> > </Appenders> > <Loggers> > <Root level="DEBUG"> > <AppenderRef ref="CONSOLE" level="WARN"/> > <AppenderRef ref="FILE" /> > </Root> > </Loggers> > </Configuration> > {code} > Gives this error: > {code} > 2017-05-11 15:52:55,959 main ERROR Unable to inject fields into builder class > for plugin type class > org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender, > element RollingRandomAccessFile. java.lang.ClassCastException: > org.apache.logging.log4j.core.appender.FileManager cannot be cast to > org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager > at > org.apache.logging.log4j.core.appender.rolling.RollingRandomAccessFileManager.getRollingRandomAccessFileManager(RollingRandomAccessFileManager.java:87) > at > org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender$Builder.build(RollingRandomAccessFileAppender.java:115) > at > org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender$Builder.build(RollingRandomAccessFileAppender.java:52) > 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.async.AsyncLoggerContext.start(AsyncLoggerContext.java:76) > 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.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122) > at > org.apache.logging.log4j.jul.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:34) > at > org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46) > at > org.apache.logging.log4j.jul.LogManager.getLogger(LogManager.java:89) > at java.util.logging.LogManager.demandLogger(LogManager.java:551) > at java.util.logging.Logger.demandLogger(Logger.java:455) > at java.util.logging.Logger.getLogger(Logger.java:502) > at > com.lmax.disruptor.FatalExceptionHandler.<clinit>(FatalExceptionHandler.java:27) > at > com.lmax.disruptor.dsl.ExceptionHandlerWrapper.<init>(ExceptionHandlerWrapper.java:8) > at com.lmax.disruptor.dsl.Disruptor.<init>(Disruptor.java:66) > at com.lmax.disruptor.dsl.Disruptor.<init>(Disruptor.java:105) > at > org.apache.logging.log4j.core.async.AsyncLoggerDisruptor.start(AsyncLoggerDisruptor.java:92) > at > org.apache.logging.log4j.core.async.AsyncLoggerContext.start(AsyncLoggerContext.java:75) > 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.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122) > at > org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43) > at > org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46) > at > org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29) > at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358) > at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383) > at com.company.project.Main.main(Main.java:1030) > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)