로깅(Logging)

·2025년 10월 24일

SPRING

목록 보기
14/15

정의 (Definition)

로깅(Logging)

  • 프로그램 실행 중 발생하는 다양한 정보를 기록하여,
    프로그램 동작 상태를 추적하고 문제를 분석하기 위한 행위
  • 출력 목적의 System.out.println() 과 달리,
    파일에 저장 및 로그 레벨별 관리가 가능

목적 (Purpose)

  • 단순 출력이 아닌 지속 가능한 기록 관리
  • 로그 레벨을 통해 중요도/상황 구분 가능
  • 배포 환경에서 문제 원인 추적, 장애 복구, 성능 모니터링에 활용
  • 유지보수 및 협업 시 “누가 언제 무엇을 실행했는가” 확인 가능

자바(Spring) 로깅 방법

1) Lombok 기반 (@Log4j2)

  • 권장 방식 : Lombok에서 제공하는 @Log4j2
    주로 Controller / Service / Scheduler 계층에서 사용됨
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.RestController;

@Log4j2
@RestController
public class SampleController {

    public void example() {
        log.debug("디버그 메시지 - 개발 중 상세 정보");
        log.info("정보 메시지 - 실행 상태 확인");
        log.warn("경고 메시지 - 예상치 못한 상태 감지");
        log.error("에러 메시지 - 예외 발생 시");
    }
}

2) @Slf4j (대체 가능)

  • Lombok이 제공하는 또 다른 어노테이션
  • 내부적으로 Simple Logging Facade for Java(SLF4J) 를 사용
  • Logback, Log4j 등 다양한 로깅 프레임워크와 연동 가능
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ExampleService {
    public void test() {
        log.info("SLF4J 로깅 테스트");
    }
}

주요 로그 레벨(Level)

레벨설명사용 시기비고
DEBUG디버깅용 상세 정보개발 단계개발자 전용 로그
INFO일반적인 상태 정보개발/운영기본값
WARN잠재적 문제 경고운영 단계문제 가능성 알림
ERROR오류/예외 상황운영 단계시스템 오류 기록
FATAL심각한 장애 (서비스 중단)드물게 사용Log4j2에서 지원

로그 설정 (application.properties)

기본 구조

# 전체 기본 로그 레벨 설정
logging.level.root=info

# 특정 패키지(예: web.service) 로그 레벨만 별도 지정
logging.level.web.service=debug

로그 파일 저장 옵션

# 로그 파일 생성 위치와 이름
logging.file.name=logs/app.log

# 로그 파일 최대 크기 및 보존 개수
logging.logback.rollingpolicy.max-file-size=10MB
logging.logback.rollingpolicy.max-history=30

로그 프레임워크 비교

구분설명특징
Log4j2가장 널리 사용되는 프레임워크고성능, 비동기 로깅
SLF4J로깅 추상화 인터페이스Logback, Log4j 등과 호환
LogbackSpring Boot 기본 내장설정 용이, 효율적 메모리 사용

실무 팁 (Best Practices)

  • print() 금지 → log.debug() 로 대체
  • 예외 발생 시
    • 로깅 레벨 조정으로 운영 환경 부하 최소화
    • 민감 정보(비밀번호, 개인정보) 절대 로그에 기록 금지
    • API 요청/응답, 스케줄 실행, DB 처리 결과 등 중요 프로세스에 INFO 레벨 사용
try {
    ...
} catch (Exception e) {
    log.error("에러 발생: {}", e.getMessage(), e);
}
  • 예시 출력 결과
2025-10-24 09:30:12 INFO  web.controller.SampleController - 정보 메시지 - 실행 상태 확인
2025-10-24 09:30:12 WARN  web.controller.SampleController - 경고 메시지 - 예상치 못한 상태 감지
2025-10-24 09:30:12 ERROR web.controller.SampleController - 에러 메시지 - 예외 발생 시

정리 요약

항목요약
정의실행 중 정보 기록
목적유지보수, 문제 추적, 성능 분석
사용 어노테이션@Log4j2 or @Slf4j
주요 메서드debug(), info(), warn(), error()
설정 파일application.properties 에서 레벨/파일 지정
추천 레벨개발: debug, 운영: info 이상
주의사항민감정보 제외, print() 사용 지양

0개의 댓글