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

Improve error msg if RollingFileAppender element missing

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.10.0
    • Fix Version/s: 3.0.0, 2.11.1
    • Component/s: Appenders
    • Labels:
      None
    • Environment:

      W7

      Description

      I did my first migration from log4j 1 to 2; previously I used property and now I wanted to use XML. This is my XML file:

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- https://logging.apache.org/log4j/2.x/manual/configuration.html -->
      <Configuration>
          <Appenders>
              <RollingFile name="A1" fileName="XXX/XXX.log">
                  <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss} %-5p %C{2}:%L - %m%n"/>
                  <Policies>
                      <SizeBasedTriggeringPolicy size="10 MB"/>
                  </Policies>
                  <DefaultRolloverStrategy fileIndex="nomax" />
              </RollingFile>
              <Console name="STDOUT" target="SYSTEM_OUT">
                  <PatternLayout pattern="%d{dd.MM.yyyy HH:mm:ss} %-5p %C{2}:%L - %m%n"/>
              </Console>
          </Appenders>
          <Loggers>
              <Logger name="org.springframework" level="warn" additivity="false">
                  <AppenderRef ref="STDOUT"/>
                  <AppenderRef ref="A1"/>
              </Logger>
              <Logger name="org.apache.pdfbox.pdmodel.font.PDCIDFontType2" level="fatal" additivity="false">
                  <AppenderRef ref="STDOUT"/>
                  <AppenderRef ref="A1"/>
              </Logger>
              <Root level="info">
                  <AppenderRef ref="STDOUT"/>
                  <AppenderRef ref="A1"/>
              </Root>
          </Loggers>
      </Configuration>
      

      This brought me this output:

      2018-02-23 12:28:22,351 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile org.apache.logging.log4j.core.config.ConfigurationException: Arguments given for element RollingFile are invalid
      at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:203)
      at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:121)
      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.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:153)
      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.jcl.LogAdapter.getContext(LogAdapter.java:39)
      at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
      at org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:40)
      at org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:55)
      at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
      at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:160)
      at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:230)
      at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:92)
      at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:59)
      at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:62)
      at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:141)
      at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
      at XXXXX.Main.main(Main.java:67)

      2018-02-23 12:28:22,359 main ERROR Null object returned for RollingFile in Appenders.
      2018-02-23 12:28:22,370 main ERROR Unable to locate appender "A1" for logger config "org.apache.log4j.xml"
      2018-02-23 12:28:22,371 main ERROR Unable to locate appender "A1" for logger config "org.springframework"
      2018-02-23 12:28:22,371 main ERROR Unable to locate appender "A1" for logger config "org.apache.pdfbox.pdmodel.font.PDCIDFontType2"

      Excerpt of my pom.xml:

              <dependency>
                  <groupId>commons-logging</groupId>
                  <artifactId>commons-logging</artifactId>
                  <version>1.2</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-core</artifactId>
                  <version>2.10.0</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.10.0</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-jcl</artifactId>
                  <version>2.10.0</version>
              </dependency>
      

      After some searching, I found out that filePattern was missing.

      So my suggestion is that you output a better error message, here: mandatory filePattern parameter is missing.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ralph.goers@dslextreme.com Ralph Goers
                Reporter:
                tilman Tilman Hausherr
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: