Java_32_@Log4j2 Annotation

OngTK·2025년 9월 29일

Java

목록 보기
32/35

Lombok @Log4j2 어노테이션 정리 ✨


📑 목차


1. 로깅 개념

1) 정의 : 프로그램 실행 중 발생하는 정보를 기록하는 행위
2) 목적 : print 대신 로깅을 사용하여 '저장' 또는 효율적인 구분(레벨)으로 유지보수에 활용
3) Spring Logging 방법

  • 권장: Lombok에서 제공하는 @Log4j2 활용
@Log4j2
class Controller {}

4) 주요 객체/함수

  • log.debug() : 개발 및 테스트 단계에서 주로 사용
  • log.info() : 상태 확인, 개발/운영 모두 사용
  • log.warn() : 경고 확인, 운영 시 사용
  • log.error() : 예외·에러 확인, 운영 시 사용

2. 로그 레벨 설정

레벨 순서: debug < info < warn < error

  • debug: 개발/테스트 과정 상세 확인
  • info: 서비스 정상 흐름 기록
  • warn: 잠재적 문제 경고
  • error: 실패/예외 상황 기록

3. @Log4j2 적용 예시

@RestController
@RequestMapping("/books")
@RequiredArgsConstructor
@Log4j2     // 로그처리 어노테이션 제공
public class BookController {

    // [250926 Log4j2 사용해보기]
    @GetMapping("/log")
    public void log(){
        log.debug("테스트 과정에서 사용"); 
        log.info("서비스의 흐름/상태에 사용");
        log.warn("잠재적인 문제에 대해 사용");
        log.error("예외/실패 상황에 사용");
    }

    // DI =========================================================
    private final BookService bookService;

    /** [1] 도서 대출 */
    @PostMapping("/rent")
    public ResponseEntity<Boolean> rentBook(@RequestBody Map<String, String> rentalInfo) {
        boolean result = false;
        try {
            log.debug("[대여 성공] {}", rentalInfo);
            result = bookService.rentBook(rentalInfo);
            return ResponseEntity.ok().body(result);
        } catch (RuntimeException e) {
            log.debug("[대여 실패] {}", rentalInfo);
            return ResponseEntity.status(405).body(result);
        }
    }

    /** [2] 도서 반납 */
    @PostMapping("/return")
    public ResponseEntity<Boolean> returnBook(@RequestBody Map<String, String> rentalInfo) {
        boolean result = false;
        try {
            result = bookService.returnBook(rentalInfo);
            log.debug("[반납 성공] {}", rentalInfo);
            return ResponseEntity.ok().body(result);
        } catch (RuntimeException e) {
            log.debug("[반납 실패] {}", rentalInfo);
            return ResponseEntity.status(405).body(result);
        }
    }
}

4. 로그 레벨별 사용

  • log.debug() → 테스트 과정, 상세 확인용
  • log.info() → 서비스 상태, 주요 이벤트 기록
  • log.warn() → 성능 저하/잠재적 오류 경고
  • log.error() → 실제 예외, 오류 발생 시 기록

💡 System.out.println 대신 로그 사용하면 운영 환경에서도 안전하게 로그 관리 가능


5. application.properties 설정

Log 설정

  • 레벨 : debug < info < warn < error
  • info 설정하면 : info , warn , error 가 출력
# [3.1] 기본설정
# 스프링 기본 로그 레벨은 info
# logging.level.root = debug
logging.level.practice.practice03_250925 = debug

# [3.2] 로그 파일 처리 설정
logging.file.name = logs/app.log

# [3.3] 로그 파일 옵션
logging.logback.rollingpolicy.max-file-size = 1MB
logging.logback.rollingpolicy.max-history = 10

# [3.4] 프레임워크 내부 로그 줄이기 (운영 단계에서 warn 이상만 출력)
spring.main.log-startup-info = false
logging.level.org.springframework.boot.web=warn
logging.level.org.springframework.boot.web.embedded.tomcat=warn
logging.level.org.apache.catalina=warn
logging.level.org.apache.coyote=warn

# 일반적으로 /logs/ 폴더 및 log 파일은 git에 올리지 않음

# [3.5] log 형식 설정
# log 파일 출력 형식 
logging.pattern.file = [%d{ yyyy-MM-dd HH:mm:ss }] %msg %n
# console 출력 형식
logging.pattern.console = [%d{ yyyy-MM-dd HH:mm:ss }] %level %logger %msg %n

6. 실무 팁

  • 개발 단계: debug 레벨 활용 → 상세 추적
  • 운영 단계: warn 이상 → 불필요한 로그 줄이고 성능 확보
  • 로그에 개인정보/보안 민감 데이터 기록하지 말 것
  • 로그 파일은 크기·개수 제한 설정 후 관리 (logback rolling policy)
  • git에는 로그 파일 업로드하지 않음

⚡ 정리:
@Log4j2는 반복 코드 줄이고 손쉽게 로그 남길 수 있는 기능 제공.
로그 레벨 구분과 설정을 잘 활용하면 개발과 운영 모두에서 효율적인 로그 관리 가능.

profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글