정의 (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 등과 호환 |
| Logback | Spring 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() 사용 지양 |