log4j2.xml loaded but not applied [JVM argument]

10,552

Solution 1

Log4j has the ability to automatically configure itself during initialization. Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration.

That 's why my file was detected and loaded without error but not used by spring boot.

The thing I forgot is to tell spring boot where to find the logging configuration file too and for that, I have to add in the application.properties of spring boot :

logging.config= # location of logging config file

And after, everything work well.

Solution 2

Try one of these formats:

-Dlog4j.configurationFile=/Workspace/demo-indexeur/config/log4j2.xml
-Dlog4j.configurationFile=file://c:/Workspace/demo-indexeur/config/log4j2.xml
-Dlog4j.configurationFile=file:///c:/Workspace/demo-indexeur/config/log4j2.xml

If you run a jar file, this argument must be placed before -jar application.jar.

Solution 3

I think we just need to add property in application.properties
For example we want to put log4j2.xml in a sub directory of jar named config. So, in application.properties we have:

logging.config=classpath:config/log4j2.xml
Share:
10,552

Related videos on Youtube

youtix
Author by

youtix

Updated on September 15, 2022

Comments

  • youtix
    youtix over 1 year

    I am trying to create a batch using spring batch, spring mvc and spring boot. And I am using log4j2 for logging.

    My goal is to load an external log4j2.xml configuration file thanks to JVM arguments like that

    -Dlog4j.configurationFile=file://C:\{path}\Workspace\demo-indexeur\config\log4j2.xml
    

    Spring boot detect my file (I have no error in the console) and load it but doesn't apply the configuration I put inside the file.

    Here is the debug of the load of my configuration file :

    2015-05-06 15:36:53,279 DEBUG Starting configuration XmlConfiguration[location=C:\{path}\Workspace\demo-indexeur\config\log4j2.xml]
    2015-05-06 15:36:53,279 DEBUG PluginManager 'Core' found 69 plugins
    2015-05-06 15:36:53,279 DEBUG PluginManager 'Level' found 0 plugins
    2015-05-06 15:36:53,279 DEBUG PluginManager 'Lookup' found 10 plugins
    2015-05-06 15:36:53,279 DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]. Searching for builder factory method...
    2015-05-06 15:36:53,279 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.layout.PatternLayout$Builder org.apache.logging.log4j.core.layout.PatternLayout.newBuilder().
    2015-05-06 15:36:53,289 DEBUG TypeConverterRegistry initializing.
    2015-05-06 15:36:53,289 DEBUG PluginManager 'TypeConverter' found 21 plugins
    2015-05-06 15:36:53,299 DEBUG Calling build() on class class org.apache.logging.log4j.core.layout.PatternLayout$Builder for element PatternLayout with params(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", Configuration(C:\{path}\Workspace\demo-indexeur\config\log4j2.xml), null, charset="null", alwaysWriteExceptions="null", noConsoleNoAnsi="null", header="null", footer="null")
    2015-05-06 15:36:53,299 DEBUG PluginManager 'Converter' found 33 plugins
    2015-05-06 15:36:53,299 DEBUG Built Plugin[name=layout] OK from builder factory method.
    2015-05-06 15:36:53,299 DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender]. Searching for builder factory method...
    2015-05-06 15:36:53,299 INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.
    2015-05-06 15:36:53,299 DEBUG PluginManager 'Converter' found 33 plugins
    2015-05-06 15:36:53,299 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
    2015-05-06 15:36:53,299 DEBUG Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.appender.ConsoleAppender$Builder org.apache.logging.log4j.core.appender.ConsoleAppender.newBuilder().
    2015-05-06 15:36:53,299 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2015-05-06 15:36:53,299 DEBUG Encountered type [org.apache.logging.log4j.core.layout.PatternLayout] which can only be checked for null.
    2015-05-06 15:36:53,309 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2015-05-06 15:36:53,309 DEBUG Encountered type [org.apache.logging.log4j.core.appender.ConsoleAppender$Target] which can only be checked for null.
    2015-05-06 15:36:53,309 DEBUG No PluginVisitorStrategy found on annotation [interface org.apache.logging.log4j.core.config.plugins.validation.constraints.Required]. Ignoring.
    2015-05-06 15:36:53,309 DEBUG Calling build() on class class org.apache.logging.log4j.core.appender.ConsoleAppender$Builder for element Console with params(PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), null, target="SYSTEM_OUT", name="Console", follow="null", ignoreExceptions="null")
    2015-05-06 15:36:53,309 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
    2015-05-06 15:36:53,309 DEBUG Built Plugin[name=appender] OK from builder factory method.
    2015-05-06 15:36:53,309 DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for builder factory method...
    2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppendersPlugin. Going to try finding a factory method instead.
    2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin]. Searching for factory method...
    2015-05-06 15:36:53,309 DEBUG Found factory method [createAppenders]: public static java.util.concurrent.ConcurrentMap org.apache.logging.log4j.core.config.AppendersPlugin.createAppenders(org.apache.logging.log4j.core.Appender[]).
    2015-05-06 15:36:53,309 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.AppendersPlugin for element Appenders with params(={Console})
    2015-05-06 15:36:53,309 DEBUG Built Plugin[name=appenders] OK from factory method.
    2015-05-06 15:36:53,309 DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for builder factory method...
    2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.AppenderRef. Going to try finding a factory method instead.
    2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef]. Searching for factory method...
    2015-05-06 15:36:53,309 DEBUG Found factory method [createAppenderRef]: public static org.apache.logging.log4j.core.config.AppenderRef org.apache.logging.log4j.core.config.AppenderRef.createAppenderRef(java.lang.String,org.apache.logging.log4j.Level,org.apache.logging.log4j.core.Filter).
    2015-05-06 15:36:53,309 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="Console", level="null", null)
    2015-05-06 15:36:53,309 DEBUG Built Plugin[name=AppenderRef] OK from factory method.
    2015-05-06 15:36:53,309 DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for builder factory method...
    2015-05-06 15:36:53,309 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger. Going to try finding a factory method instead.
    2015-05-06 15:36:53,309 DEBUG Still building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger]. Searching for factory method...
    2015-05-06 15:36:53,309 DEBUG Found factory method [createLogger]: public static org.apache.logging.log4j.core.config.LoggerConfig org.apache.logging.log4j.core.config.LoggerConfig$RootLogger.createLogger(java.lang.String,org.apache.logging.log4j.Level,java.lang.String,org.apache.logging.log4j.core.config.AppenderRef[],org.apache.logging.log4j.core.config.Property[],org.apache.logging.log4j.core.config.Configuration,org.apache.logging.log4j.core.Filter).
    2015-05-06 15:36:53,319 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(additivity="null", level="ERROR", includeLocation="null", ={Console}, ={}, Configuration(C:\{path}\Workspace\demo-indexeur\config\log4j2.xml), null)
    2015-05-06 15:36:53,319 DEBUG Built Plugin[name=root] OK from factory method.
    2015-05-06 15:36:53,319 DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for builder factory method...
    2015-05-06 15:36:53,319 DEBUG No builder factory method found in class org.apache.logging.log4j.core.config.LoggersPlugin. Going to try finding a factory method instead.
    2015-05-06 15:36:53,319 DEBUG Still building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin]. Searching for factory method...
    2015-05-06 15:36:53,319 DEBUG Found factory method [createLoggers]: public static org.apache.logging.log4j.core.config.Loggers org.apache.logging.log4j.core.config.LoggersPlugin.createLoggers(org.apache.logging.log4j.core.config.LoggerConfig[]).
    2015-05-06 15:36:53,319 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.LoggersPlugin for element Loggers with params(={root})
    2015-05-06 15:36:53,319 DEBUG Built Plugin[name=loggers] OK from factory method.
    2015-05-06 15:36:53,319 DEBUG Started configuration XmlConfiguration[location=C:\{path}\Workspace\demo-indexeur\config\log4j2.xml] OK.
    2015-05-06 15:36:53,319 TRACE Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@5b87edb3...
    2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 AsyncLoggerConfigs.
    2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 AsyncAppenders.
    2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 1 Appenders.
    2015-05-06 15:36:53,319 TRACE AbstractConfiguration stopped 0 Loggers.
    2015-05-06 15:36:53,319 DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@5bc79274 OK
    2015-05-06 15:36:53,319 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44
    2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=StatusLogger
    2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=ContextSelector
    2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=Loggers,name=
    2015-05-06 15:36:53,329 DEBUG Registering MBean org.apache.logging.log4j2:type=sun.misc.Launcher$AppClassLoader@c387f44,component=Appenders,name=Console
    2015-05-06 15:36:53,329 DEBUG Reconfiguration complete for context[name=sun.misc.Launcher$AppClassLoader@c387f44] at null (org.apache.logging.log4j.core.LoggerContext@72b6cbeb) with optional ClassLoader: null
    2015-05-06 15:36:53,329 DEBUG Shutdown hook enabled. Registering a new one.
    2015-05-06 15:36:53,329 DEBUG LoggerContext[name=sun.misc.Launcher$AppClassLoader@c387f44, org.apache.logging.log4j.core.LoggerContext@7fac633a] started OK.
    2015-05-06 15:36:53,489 DEBUG Using configurationFactory org.apache.logging.log4j.core.config.ConfigurationFactory$Factory@6973bf95
    2015-05-06 15:36:53,489 INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.
    

    When I move the file inside "src/main/resources", it works perfectly but when I try to externalise the file it doesn't.

    Here is my xml file :

    <?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>
      </Appenders>
      <Loggers>
        <Root level="error">
          <AppenderRef ref="Console"/>
        </Root>
      </Loggers>
    </Configuration>
    

    Here are my dependencies :

    <!--    Spring Batch -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
            <exclusions>
    <!--            Suppression de SLF4J -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
    <!--    Spring web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
    <!--            Suppression de SLF4J -->
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
    <!--    Utilisation de LOG4J2 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    

    Can someone tell me why it doesn't work when I externalize the file? Thank you for your help.

  • AdrianVeidt
    AdrianVeidt over 8 years
    This worked for me in my spring boot application.properties file. Thanks.