본문 바로가기
Programing/Spring & Spring Boot

[Spring Boot] 스프링 부트 로그 설정

by 미미믹 2024. 8. 26.

인프런 - 김영한 :: 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의 내용 정리

스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리가 포함됨

SLF4J 인터페이스를 구현한 Log4J (현재 사용X), Logback, Log4J2 중 하나를 선택해서 사용

실무에서는 Logback을 대부분 사용한다고 함

로그 선언
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTestController {
	private final Logger log = LoggerFactory.getLogger(getClass());
}
로그 선언 (롬복 사용 시)
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LogTestController {

}

롬복 사용 시에는 어노테이션만 추가해줘도 사용 가능


로그 사용
    log.trace("trace log = {}", name);
    log.debug("trace log = {}", name);
    log.info("info log = {}", name);
    log.warn("warn log = {}", name);
    log.error("error log = {}", name);

로그 출력 포맷 :: 시간 로그레벨 프로세스ID --- [쓰레드명] 클래스명 : 로그메시지

log.debug("debug log = "+ name); 으로도 사용할 수 있지만
로그 레벨을 info로 설정해도 +로 인해 더하기 연산이 발생하게된다.
==> 출력되지도 않는 로그에 연산이 발생해서 메모리 낭비 발생

application.properties(yml)에서 간단한 로그 설정을 할 수 있지만 그 외 다양한 설정을 위해서는 logback-spring.xml 파일을 사용해 설정해줘야한다.


로그 레벨 설정

application.properties

# 패키지 전체 로그 레벨 설정(기본 info)
logging.level.root=info

# 특정 패키지(ex. hello.springmvc)와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug

application.yml

# 패키지 전체 로그 레벨 설정(기본 info)
logging:
  level:
    root: info

# 특정 패키지(ex. hello.springmvc)와 그 하위 로그 레벨 설정
logging:
  level:
    hello.springmvc: debug

로그 레벨 :: trace > debug > info > warn > error 순서
(error가 가장 상위 로그 레벨)

default 로그 레벨은 info
설정한 로그레벨 포함 상위 레벨 로그가 출력된다.

로그 레벨을 trace로 설정할 경우, 모든 레벨의 로그가 출력되고
warn으로 설정할 경우, warn과 error 로그만 출력됨


로그 사용 시 장점
  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
  • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게
    조절할 수 있다.
  • 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파
    일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
  • 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한다

참고 - 인프런 강의 :: 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한)