How can I change the default location of log4j2.xm

2020-02-08 08:05发布

Log4j2 is working nicely with Spring Boot through the log4j2.xml configuration file in the root classpath, exactly as the documentation states.

When trying to move this file to a different location though, I'm not able to pass the new location to Spring at startup. From the documentation:

The various logging systems can be activated by including the appropriate libraries on the classpath, and further customized by providing a suitable configuration file in the root of the classpath, or in a location specified by the Spring Environment property logging.config.

I tried setting the new location with a Java system property

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar

or using an external application.properties containing the relevant property

logging.config=classpath:/config/log4j2.xml

But I am regularly greeted by the following error message.

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

6条回答
Animai°情兽
2楼-- · 2020-02-08 08:30

The answer of micpalmia is absolutely correct.

I needed to put the configuration outside the classpath I didn't want to pass the config file as a parameter. So i put a very simple logging configuration in the classpath resources and had the spring boot application reconfigure logging upon start, like so:

@SpringBootApplication
public class Application implements CommandLineRunner {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... param) throws UnsupportedEncodingException {
        Configurator.initialize(null, "config/log4j2.xml");
        // ...
    }
}

This approach has a significant disadvantage: The whole application boot process will not be logged as externally configured. But once the custom code is run the logger works as intended. While you may not, I find this to be a compromise I can live with.

查看更多
该账号已被封号
3楼-- · 2020-02-08 08:31

In case of property file:

java -Dlog4j.configuration=file:/path/to/log4j.properties -jar app.jar

To the command line works in Spring Boot 2. Don't forget to add file: before the path.

查看更多
Anthone
4楼-- · 2020-02-08 08:37

As specified in the Spring reference documentation, the logging.config property cannot be set among the application properties, as they are read after the logging has already been initialised.

The solution is to provide the path to the external logging configuration this way:

java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar
查看更多
SAY GOODBYE
5楼-- · 2020-02-08 08:46

I have the same problem in my project, besides log4j2.xml I also need other config files in the class path. Here is my 2 solutions that works:

Soluation 1 : Start spring boot application with org.springframework.boot.loader.JarLauncher

java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher

Solution 2: Write a './config' class path entry in the MANIFEST.MF in the jar

    <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifestEntries>
               <Class-Path>./config/</Class-Path>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.3.RELEASE</version>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
查看更多
劳资没心,怎么记你
6楼-- · 2020-02-08 08:47

I have working solution to set custom path or change existing file path for logging file. If you have configured log4j2.xml file, open it and see where you have to do one line change to config log file path.enter image description here

查看更多
祖国的老花朵
7楼-- · 2020-02-08 08:52

As mentioned in the log4j2 documentation here, you can include a file named log4j2.component.properties in your resources folder (or anywhere in the classpath) and inside that file, you can provide the name of the file location (or a new file name) like this:

log4j.configurationFile=path/to/log4j2.xml

or

log4j.configurationFile=classpath:log4j2-custom.xml (if the file is on the classpath)

You can alternatively provide the config file location via the context-param fields of web.xml as mentioned here, but I haven't tried that option

(This works with Spring Boot too)

查看更多
登录 后发表回答