[Spring Boot] 로그에 대하여

nano·2024년 12월 13일

Spring Boot

목록 보기
2/4

📄 Spring에서 로그를 선언하고 사용하는 방법

1. @RestController vs @Controller

  • @Controller:
    • 반환값이 String일 때, 뷰 이름으로 인식합니다.
    • 뷰를 찾고 렌더링을 수행합니다.
  • @RestController:
    • 반환값이 뷰로 연결되지 않고, HTTP 메시지 바디에 바로 전달됩니다.
    • @ResponseBody와 관련이 있습니다.

2. 로그 출력 포맷

Spring에서 로그를 출력할 때 일반적으로 다음과 같은 포맷을 사용한다.
시간 | 로그 레벨 | 프로세스 ID | 쓰레드 명 | 클래스 명 | 로그 메시지


3. 로그 레벨

로그 레벨에는 다음과 같은 단계로 나뉘어있는데,

  1. TRACE
  2. DEBUG
  3. INFO
  4. WARN
  5. ERROR
  • 개발 서버에서는 DEBUG 레벨까지 출력합니다.
  • 운영 서버에서는 보통 INFO 레벨부터 출력합니다.

4. 로그 선언과 @Slf4j

Spring에서 로그를 쉽게 사용할 수 있게 도와주는 어노테이션으로는 @Slf4j가 있는데, 예시는 아래와 같이 볼 수 있다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyController {
    public void logExample() {
        log.info("This is an info log");
    }
}

다음과 같이 로그를 선언할경우 나오는 출력으로는
2024-06-13 12:45:33 INFO 12345 — [main] com.example.MyClass: This is an info log.
이렇게 로그의 시간, 타입, 클래스명, 로그내용등을 볼 수 있다.

5. 로그 사용시 주의해야할 점

일반 문자열인 경우 위와 같이 텍스트를 작성하면 되지만, 데이터를 받아서 쓰고싶은 경우가 있을텐데

❌비효율적인 예시
String name = "로그내용 확인해보기"
log.trace("trace logs = " + name);

다음과 같이 로그를 출력하게될 경우 실제 로그까지 넘어가지 않더라도 이미 연산이 진행되었기때문에 서버의 리소스를 사용하게되는데, 이를 해결하는 방법이 있다.

✅효율적인 예시

String name = "로그내용 확인해보기"
log.trace("trace logs = {}", name);

다음과 같이 로그를 작성할 경우 해당 로그가 출력이 될때만 변수값을 가져와서 연산을 진행하기때문에 리소스를 절약 할 수 있다.

0개의 댓글