2017년 7월 16일 일요일

Spring Boot에서 Logback 설정 파일 지정하기

 전에 IntelliJ IDEA CE 버전으로 Spring Boot 프로젝트를 생성하는 방법을 설명했었다. 그 방법으로 Spring Boot 프로젝트를 최소한의 dependency만 설정한 채로 생성을 하면 'spring-boot-starter'에 대한 dependency만 가진 채로 생성이 된다.

 이 상태로 Project 뷰에 가서 External Libraries를 열어보면 Logback과 SLF4J 라이브러리에 대한 dependency가 이미 포함되어있는 걸 알 수 있다. 즉, 추가 dependency 설정 없이 이미 Logback을 사용할 수 있는 상태라는 뜻이다. JCL, JUL, Log4J 같은 다른 Logger들을 SLF4J로 연결해주는 브릿지 라이브러리들도 모두 이미 들어가 있으니 Logback을 위한 dependency 설정은 제대로 되어있다고 볼 수 있다.

 Spring Boot에서 Logback 설정 파일은 일반적으로 logback-spring.xml 파일을 만들어서 classpath 루트에 두면 된다. 즉 'src/main/resources'에 logback-spring.xml 파일을 만들어서 넣어두면 알아서 찾아서 적용이 된다. 하지만 'src/main/resources'에 넣어두는 파일은 jar 배포시 jar안에 들어가게 되기 때문에 매번 실행 전에 로그 레벨 등의 설정을 바꿔서 적용하겠다는 의도로는 적합하지 않은 방법이다.  그렇게 하려면 로그 설정 파일은 jar파일 외부에 따로 존재하도록 해야한다.

 로그 설정 파일을 따로 만들어 두고 그 파일을 Spring Boot에서 읽어가도록 하는 방법은 application.properties 파일에 로그 설정 파일을 지정하는 것이다. 아래와 같이 logging.config 속성을 정의해주면 그 속성에 지정된 파일을 찾아서 로그 설정 파일로 이용한다.
# application.properties
logging.config=logback.xml
 로그 설정파일의 이름도 logback-spring.xml이 아닌 다른 원하는 이름으로 지정해서 사용해도 문제가 없다. 위 설정에서는 jar를 실행하는 폴더에 있는 logback.xml 파일이 설정파일로 이용될 것이다.

 위 설정으로 배포를 하게되면 반드시 logback.xml 파일이 jar를 실행하는 폴더에 같이 있어야 한다. 만약 없으면 로그 기능은 동작하지 않게 되고 설정 파일이 없다는 불평을 보게될 것이다. 이렇게 되면 배포할 때 항상 logback.xml 파일도 같이 배포해야 하는 부담이 생긴다. 왠지 설정 파일이 없으면 default로 적용되는 파일이 따로 있어서 반드시 같이 배포해야 하는 부담이 없었으면 좋겠다는 생각이 들 것이다.

 default 로그 설정 파일을 만들어서 jar에 포함시키고 외부에 파일이 있을 때는 그 파일을 지정할 수 있으면 된다.

 먼저 default로 적용될 로그 설정 파일을 만들자.  설정 파일 이름은 'logback.xml'이라고 하겠다.
1. jar에 포함시킬 default 로그 설정 파일은 'src/main/resources' 폴더에 만들어서 넣어둔다.
2. 'src/main/resources' 폴더에 'application.properties'에 아래 설정을 추가한다.
# application.properties in 'src/main/resources'
logging.config=classpath:logback.xml
 사실 별 내용은 없다. classpath에 있는 logback.xml 파일을 default로 사용하도록 설정한 것이다. 이 파일들은 jar 안에 들어있기 때문에 jar만 배포했을 때 jar 안에 있는 설정 파일들이 적용된다.

 이 상태에서 외부에 있는 설정 파일들을 적용하려면? 그냥 jar를 실행하는 폴더에 application.properties 파일을 두고 거기에 처음에 설명한 것처럼 외부 설정파일을 지정하면 된다. jar 외부에 있는 application.properties 파일이 더 우선순위가 높기 때문에 그곳에 지정한 파일이 적용된다.

0 개의 댓글:

댓글 쓰기