로그를 등록하는 라이브러리인 Logback에 대해서 알아보겠습니다.
로깅(logging)
- 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 의미한다.
- 개발 영역 중 '비기능 요구사항' 에 속한다. (사용자나 고객에게 필요한 기능은 아니라는 의미)
- 디버깅하거나 개발 이후 발생한 문제를 해결할 때, 원인을 분석하는 데 꼭 필요한 요소이다.
Logback
- 자바 진영에서 가장 많이 사용되는 로깅 프레임워크는 'logback' 입니다.
- log4j 이후에 출시된 로깅프레임워크로써 slf4j를 기반으로 구현되었으며 과거에 사용되던 log4j에 비해 월등한 성능을 자랑한다.
- 스프링부트의 spring-boot-starter-web 라이브러리 내부에 내장되어있어 별도의 의존성을 추가화지 않아도 사용 가능하다.
Logback의 특징
- 크게 5개의 로그 레벨을 설정할 수 있다.
- ERROR : 로직 수행 중에 시스템에 심각한 문제가 발생해서, 애플리케이션의 작동이 불가능한 경우를 의미
- WARN : 시스템의 에러의 원인이 될 수 있는 경고 레벨을 의미
- INFO : 애플리케이션의 상태 변경과 같은 정보 전달을 위해 사용
- DEBUG : 애플리케이션의 디버깅을 위한 메시지 표시하는 레벨을 의미
- TRACE : DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨을 의미
- 실제 운영 환경과 개발 환경에서 각각 다른 출력 레벨을 설정해서 로그를 확인할 수 있다.
- Logback의 설정 파일을 일정 시간마다 스캔해서 애플리케이션을 재가동하지 않아도 설정을 변경할 수 있다.
- 별도의 프로그램 지원 없이도 자체적으로 로그 파일을 압축할 수 있다.
- 저장된 로그 파일에 대한 보관 기간 등을 설정해서 관리할 수 있다.
Logback의 설정
일반적으로 클래스패스(classPath)에 있는 설정 파일을 자동으로 참조하므로
Logback 설정 파일은 리소스 폴더 안에서 생성한다.
파일명의 경우 일반적인 자바 또는 스프링 프로젝트에서는 logback.xml 이라는 이름으로 참조하지만,
스프링 부트에서는 logback-spring.xml 파일을 참조한다.
Appender 영역
로그의 형태를 설정하고, 어떤 방법으로 출력할지를 설정하는 곳이다.
Append 자체는 하나의 인터페이스를 의미하여, 하위에 여러 구현체가 존재한다.
- ConsoleAppender : 콘솔에 로그 출력
- FileAppender : 파일에 로그 저장
- RollingFileAppender : 여러 개의 파일을 순회하면서 로그 저장
- SMTPAppender : 메일로 로그 전송
- DBAppender : 데이터베이스에 로그 저장
Encoder 영역
로그 표현 형식을 패턴(pattern)으로 정의한다.
패턴 | 의미 |
%Logger{length} | 로거의 이름 |
%-5level | 로그레벨, -5는 출력 고정폭의 값 |
%msg(%message) | 로그 메시지 |
%d | 로그 기록 시간 |
%p | 로깅 레벨 |
%thread | 현재 스레드명 |
%F | 로깅이 발생한 애플리케이션 파일명 |
%M | 로깅이 발생한 메서드 이름 |
%I | 로깅이 발생한 호출지의 정보 |
Root 영역
Appender를 활용하려면 Root 영역에서 Appender를 참조해서 로깅 레벨을 설정한다.
특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root 대신에 logger를 사용하여 지정한다.
<!-- Root -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
<!-- Logger -->
<logger name = "com.spring.api.controller" level="DEBUG" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</logger>
logger 요소
- name : 패키지 단위로 로깅이 적용될 범위를 지정
- level : 로그 레벨을 지정
- additivity : 앞에서 지정한 패키지 범위에 하위 패키지 포함 여부 결정(기본값 : true, 이 경우 하위 패키지를 모두 포함)
Logback의 적용
Logback은 출력 메시지를 Appender에게 전달할 Logger 객체를 각 클래스에 정의해서 사용한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
private final Logger logger = LoggerFactory.getLogger(GetController.class);
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String getHello() {
logger.info("getHello 메서드가 호출되었습니다.");
return "Hello World";
}
}
Logback Test
Logback 컨트롤러에 들어오는 값 확인
- [+] 연산자
- String 클래스의 concat() 메서드 활용
- String 클래스의 append() 메서드 활용
- String 클래스의 format() 메서드 활용
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
private final Logger logger = LoggerFactory.getLogger(GetController.class);
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
logger.info("@PathVariable을 통해 들어온 값 : {}", variable);
return variable;
}
}
반응형
'Book > 스프링부트 핵심가이드' 카테고리의 다른 글
ORM과 JPA의 개념 이해 (0) | 2023.11.01 |
---|---|
Swagger - REST API 명세 문서화 (1) | 2023.10.26 |
DELETE 메서드 구현 방법(feat. @DeleteMapping) (0) | 2023.10.25 |
댓글