티스토리 뷰
기존 log를 관리하기 위한 구현체로써 log4j가 사용되었다. 그러나 보다 안정성이 높고 편리하게 log를 관리하기 위해 Logging framework인 Slf4j(Simple Logging Façade for Java)와 그 구현체로써 Logback이 고안되었다.
Slf4j는 일명 Façade 패턴으로, 이를 사용하면 구현체의 종류와 상관없이 일관된 로깅 코드를 작성할 수 있으며 구현체를 변경할 경우에도 최소한의 수정으로 교체가 가능하다. 이에 맞춘 Logback은 log4j의 후속 버전으로 만든 Logging 라이브러리이다. Logback은 springboot의 기본 Logging framework로 사용될만큼 범용적이고 다양한 기능을 가지고 있다.
log 관리 및 처리 구조는 다음과 같다.
Logback 특징
- 빠른 implementation
- 적은 메모리 점유
- XML로 logging 설정
- maxHistory 설정 값을 이용해 일정 기간이 지나면 로그파일 자동 삭제
- Filter 기능 : 사용자별 level 조정 가능
Logback 구조
Logback을 사용하기 위해서는 다음과 같은 tag들로 구성되어있다.
- Logger : 로그의 주체, 로그의 메시지 전달, 특정 패키지 안의 특정 레벨이상인 것에 대해 출력
- Appender : 어디에 출력할지에 대해 기술 - console / file / DB appender
- Encoder : 어떻게 출력할지에 대해 기술
Logback 환경설정 (pom.xml)
Logback을 사용하기 위해선 pom.xml에 다음과 같은 라이브러리를 추가로 설정해주어야 한다.
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
Logback 설정 (logback.xml)
src/main/resources 하단에 logback.xml 파일을 생성한 후 다음과 같이 Logback을 설정할 수 있다.
<configuration scan="true" scanPeriod="30 seconds">
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>[%d{HH:mm:ss.SSS}][%-5level][%logger{36}.%method:line%line] - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info" additivity="false">
<appender-ref ref="console" />
</logger>
</configuration>
위 예시에서는
<appender>를 통해 console로 출력 위치를 지정하고, <encoder>를 통해 pattern과 같은 형태로 log를 출력한다.
또한 <logger>를 통해 info level 이상의 log를 참고한 console에 출력할 것임을 확인할 수 있다.
참고로, log의 level은 다음과 같이 구성되어있다.
OFF - FATAL - ERROR - WARN - INFO - DEBUG - TRACE - (ALL)
이렇게 구분되어있는 log level을 통해 원하는 level의 log정보를 선택적으로 확인할 수 있다. 예를 들어 log level을 info로 설정했을 경우, 그 이상의 레벨인 info, debug, trace에 관한 log가 모두 출력된다.
선택한 log 이외의 정보들에 대해서는 <root>로 설정해주도록 한다. log관리에 있어서 else와 같은 기능을 한다.
<root level="debug">
<appender-ref ref="CONSOLE"/>
</root>
Logback 사용법
log를 출력할 java 파일에서는 다음 예시와 같이 사용하면 된다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SampleLogTest {
private static final Logger log = LoggerFactory.getLogger(SampleLogTest.class);
public void testLog() {
log.debug("log test");
}
}
위와 같이 사용할수 있고 일전에 다룬대로 lombok을 사용해서 로깅을 할수도 있다. 자세한 내용은 다음 글을 참조하자.
끝!
'Framework > Logging' 카테고리의 다른 글
Logback include 사용하여 가독성 높이기 (0) | 2021.01.19 |
---|---|
log4j에서 slf4j + logback 으로 전환하기 (0) | 2020.08.07 |
Logback 오류 해결 - NoSuchMethodError: ch.qos.logback.classic.LoggerContext.removeObject(Ljava/lang/String;)V (0) | 2020.06.26 |
lombok 설치 및 @Slf4j 사용방법 (0) | 2020.06.11 |
NoClassDefFoundError: org/apache/commons/logging/LogFactory 오류 (0) | 2020.06.08 |