웹 개발

java에서 logback.xml 경로 변경하는 방법

노루아부지 2021. 12. 18. 21:42
반응형

logback을 사용하면서 logback의 설정을 변경해야 할 경우가 있습니다.

 

java web project에서는 logback.xml을 수정 후 WAS를 재시작하면 되고 Spring boot의 경우에는 application.properties의 옵션으로 logback.xml의 경로를 변경할 수 있습니다.

그런데, Runnable jar의 경우 jar안에 logback.xml이 포함되어 있어서 변경하기 애매합니다.

(물론.. jar파일 안의 xml 파일을 수정하면 되긴합니다.)

 

불편하게 jar파일 안의 xml파일을 수정하지 않고 다른 좋은 방법이 있는데, 다음과 같습니다.

 

1. -Dlogback.configurationFile 옵션 사용

다음과 같이 java를 실행할 때의 옵션으로 파일 경로를 변경할 수 있습니다.

java -Dlogback.configurationFile=config.xml -jar test.jar

여기서 주의사항 및 참고사항이 있습니다.

  1. -Dlogback.configurationFile 옵션이 test.jar 뒤에 오면 안 됩니다. 그 경우 값이 옵션이 아닌 test.jar의 arguments로 인식합니다.
  2. -Dlogback.configurationFile 옵션에 파일 경로 없이 파일명만 있을 경우 jar와 같은 경로를 참조합니다.
  3. -Dlogback.configurationFile 옵션을 사용하더라도 test.jar 내부에 logback.xml이 존재한다면 무조건 test.jar의 logback.xml을 참조하기 때문에 반드시 jar 파일 내부의 logback.xml을 삭제해야 합니다.

 

2. System.setProperty 사용

System.setProperty("logback.configurationFile", "/path/to/config.xml");

위와 같이 System.setProperty로 옵션을 변경할 수 있습니다.

샘플 코드는 다음과 같습니다.

class Main {
  static {
    System.setProperty("logback.configurationFile", "/path/to/config.xml");
  }
  private final Logger LOG = LoggerFactory.getLogger(Main.class);

  public void main (String[] args) { ... }
}

 

 

3. ch.qos.logback.classic.joran.JoranConfigurator 활용

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import org.slf4j.LoggerFactory;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Test2 {
  public static void main(String[] args) throws IOException, JoranException {
    LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
    loggerContext.reset();
    JoranConfigurator configurator = new JoranConfigurator();
    InputStream configStream = new FileInputStream("/path/logback.xml");
    configurator.setContext(loggerContext);
    configurator.doConfigure(configStream); // loads logback file
    configStream.close();
  }
}

 

728x90
반응형
loading