Logback

Logback 이 무엇이고, 어떻게 사용하는지 정리한다.

1. SLF4J (Simple Logging Facade for Java)

우선 SLF4J 가 무엇인지 알아보자.
공식 문서 (http://www.slf4j.org/manual.html) 에 따르면, SLF4J 는 java.util.logging, logback 및 log4j 와 같은 다양한 Logging Framework 에 대한 Facade 또는 추상화 역할을 한다.
그래서, SLF4J 는 개발자가 원하는 Logging Framework 를 plug-in 할 수 있도록 지원한다. 예를 들면, SLF4J Facade 덕분에 log4j 구현체를 사용하다가 logback 구현체로 변경하여도 일관된 방식으로 logging 이 가능하다.

2. Logback

logback 은 log4j 의 후속 프로젝트이다. 왜 log4j 대신에 logback 를 사용해야하는지는 공식 문서 (http://logback.qos.ch/reasonsToSwitch.html) 를 참고하자.
이제 실제 프로젝트에 적용을 해보자.

3. 의존성 확인

의존 관계 tree 를 명확히 확인하기 위해 maven 기반으로 프로젝트를 생성하였다.
pom.xml 에는 다음과 같이 spring-boot-starter 가 포함되어 있다.

그리고, spring-boot-starter 를 따라가면, 다음과 같이 spring-boot-starter-logging 이 포함되어 있다.

그리고, spring-boot-starter-logging 을 따라가면, 다음과 같이 logback 이 포함되어 있다.

External Libraries 에도 의존성이 추가 된것을 알 수 있다.

따라서, Logback 에 대한 의존성을 따로 내가 추가할 필요 없이 바로 사용할 수 있다.

4. 적용

logback-spring.xml 파일을 천천히 보자.

  1. 변수를 지정하는 부분이다. 해당 변수의 값이 필요한 곳에 가져다 쓰면 된다.

  2. appdender 를 정의한다. ROLLING 이라는 이름을 부여한 appdender 는 ERROR Level 에 해당하는 로그만 필터링해서 남긴다. Rolling Policy 가 적용되어 있어서, 해당 위치의 파일에 시간 단위로 파일을 생성해서 로깅을 한다. maxHistory 는 5 로 최근 5시간의 파일만 유지하고 나머지는 자동으로 지운다.

  3. 환경에 따라, appender 를 다르게 지정할 수 있다. active profile = local 인 경우에는, STDOUT appender 와 ROLLING appender 가 모두 적용된다.

5. 결과

다음과 같이 코드를 작성하고 Application 을 구동해보자.

Console Log 부터 확인해보자.

“this is TRACE Level” 은 logging 되지 않은 것을 확인할 수 있다. 왜일까?
active profile=local 로 실행되었을 때 root level 이 DEBUG 로 설정되어 있기 때문이다. 그래서 DEBUG Level 이상의 로그만 찍힌 것이다.
이제 file log 를 확인해보자. 해당 위치에 file 이 생성되었다.

해당 File 을 열어보면, ERROR log 만 남았다.

왜일까 ? ROLLING appender 에서 ERROR 로그만 Filtering 하고 있기 때문이다.

6. Source Code

위에서 테스트한 Source Code 는 여기서 확인할 수 있다 : https://github.com/KoJunHee/demo-logback

Comments