1. Logging library
- 스프링 부트 로깅 라이브러리는 SLF4J 로깅 라이브러리를 사용한다.
- 로그 라이브러리는 Logback, Log4J, Log4J2 등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리다. 즉, SLF4J는 인터페이스이고 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다.
2. 로그 선언 및 호출 방법
// 선언 방법 1 : 해당 class에 Logger 제공
private Logger log = LoggerFactory.getLogger(getClass());
// 선언 방법 2 : xxx class에 Logger 제공
private static final Logger log = LoggerFactory.getLogger(xxx.calss);
// 선언 방법 3 : Lombok library 이용
@Slf4j
// 호출 방법 : info level
log.info("hello!");
3. 로그 레벨
- LEVEL: TRACE > DEBUG > INFO > WARN > ERROR
- 개발 서버의 경우 debug 레벨을 주로 사용하고, 운영 서버의 경우 info 레벨을 주로 사용한다.
// 로그 레벨 설정 : application.properties
# 전체 로그 레벨 설정(기본 info)
logging.level.root = info
# hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc = debug
4. 로그 성능 비교
log.debug("data = " + data);
- 로그 출력 레벨을 info로 설정해도 해당 코드에 있는 "data = " + data가 실제 실행이 되어 버린다.
- 문자 더하기 연산이 발생한다.
log.debug("data = {}", data);
- 로그 출력 레벨을 info로 설정하면 아무 일도 발생하지 않는다.
- 의미 없는 연산이 발생하지 않는다.
5. 로그 사용 장점
- 스레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양 또한 조절할 수 있다.
- 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영 서버에서는 출력하지 않는 등 상황에 맞게 로그를 조절할 수 있다.
- 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등 별도의 위치에 로그를 남길 수 있다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
- System.out보다 성능이 좋다.
참고
- http://dveamer.github.io/backend/HowToUseSlf4j.html
- 『스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술』
'Spring' 카테고리의 다른 글
@Controller, @RestController 차이점 (0) | 2021.11.12 |
---|---|
@RequestMapping (0) | 2021.11.12 |
DispatcherServlet (0) | 2021.11.08 |
Bean Scope (0) | 2021.10.16 |
Bean LifeCycle & Callback (0) | 2021.10.11 |