Seeker
Seeker

Reputation: 209

customize log file name from code in springboot

I have a simple springboot application with rest end points. Every time I call the rest end point, it performs a certain activity. Right now, all the logging information goes to server.log file in wildfly. I would like to have a scenario where i can customize the name of the log file everytime my rest end points are invoked. For e.g.

All logging information from point A to Point B shall goto a file called First.log and all the logging information from point B to Point C shall goto Second.log

Is such an implementation possible either by using logback or log4j2. can i customize the name of the log file from code where in I specify every logging information from this point on should go to a specific file.

Upvotes: 1

Views: 2199

Answers (1)

Piotr P. Karwasz
Piotr P. Karwasz

Reputation: 16045

If you are using Log4j2, you can reconfigure it at runtime with Configurator#reconfigure.

The standard log4j2.xml file used by Spring Boot (cf. Github) uses the Java system property LOG_FILE to store the location of the log file. Therefore you just need to:

  • configure Spring Boot to log to a file (cf. documentation). For example you can add:

    logging.file.name = initial.log
    

    to your `application.properties,

  • whenever you want to change the name of the log file call

    System.setProperty("LOG_FILE", "first.log");
    Configurator.reconfigure();
    

Log4j2 guarantees you that no message will be lost during reconfiguration (the old file is closed after the new one has been created).

There is certainly a similar solution for Logback, but Logback can lose messages during reconfiguration.

Upvotes: 2

Related Questions