반응형
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
여기서 주의사항 및 참고사항이 있습니다.
- -Dlogback.configurationFile 옵션이 test.jar 뒤에 오면 안 됩니다. 그 경우 값이 옵션이 아닌 test.jar의 arguments로 인식합니다.
- -Dlogback.configurationFile 옵션에 파일 경로 없이 파일명만 있을 경우 jar와 같은 경로를 참조합니다.
- -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
반응형
'웹 개발' 카테고리의 다른 글
Spring Boot OAuth2 – AuthorizationServer (0) | 2022.01.06 |
---|---|
HTML CSS에서 font에 테두리(외곽선) 넣기 (0) | 2021.12.19 |
div(레이어) 밑의 객체를 클릭 가능하게 하는 방법 (0) | 2021.12.18 |
java logging framework(log4j, log4j2, slf4j) (0) | 2021.12.14 |
java reflection을 통해 class의 setter method를 호출하는 방법 (0) | 2021.12.13 |