[ 
https://issues.apache.org/jira/browse/LOG4J2-1908?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Remko Popma updated LOG4J2-1908:
--------------------------------
    Description: 
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}


  was:
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:
{noformat}
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)
{noformat}



> 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
>
> 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)

Reply via email to