본문 바로가기
Java/참고자료

[Java] 로그 사용법 정리(DEBUG / INFO / WARN / ERROR)

by SeungyubLee 2025. 11. 27.

※ DEBUG

// DEBUG : 디버깅용 상세 정보 출력
// 변수 값, 조건문 흐름, 내부 로직 확인이 필요할 때
int offsetLag = 10;
log.debug("offsetLag value = {}", offsetLag);

 

<출력>

2025-11-27 10:15:30.100 DEBUG [sampleThread] sample.TestClass : offsetLag value = 10

 

INFO

// INFO : 정상적인 서비스 흐름 기록
// 작업 시작/종료, 정상적인 이벤트 발생 시, 상태 로그 남길 때
int metricCount = metrics.size();
log.info("Metric collection started. count={}", metricCount);

 

<출력>

2025-11-27 10:15:30.100 INFO  [sampleThread] sample.TestClass : Metric collection started. count=32

 

WARN

// WARN : 비정상 상황이지만 동작은 가능한 경우
// null 값, 데이터 누락, 잠재적 장애 가능성이 있을 때
log.warn("Data is missing. userId={}", userId);

 

<출력>

2025-11-27 10:15:30.100 WARN  [sampleThread] sample.TestClass : Data is missing. userId=23

 

ERROR

// ERROR : 장애 상황, 즉시 대응해야 하는 오류
// 예외 발생, 프로세스 실패, 기능 수행 불가
try {
    execute();
} catch (Exception e) {
    log.error("Unexpected error occurred", e);
}

 

<출력>

2025-11-27 10:15:30.100 ERROR [sampleThread] sample.TestClass : Unexpected error occurred
java.lang.NullPointerException: null
    at sample.TestClass.execute(TestClass.java:52)
    at sample.TestClass.run(TestClass.java:20)

 

sysout & log 비교

항목 sysout log
운영 서버 사용 X 절대 안 됨 O 필수
파일 저장 X 없음 O 가능
로그 레벨 X 없음 O DEBUG/INFO/WARN/ERROR
성능 X 느림 O 매우 빠름
분석 X 어려움 O 시간/스레드/클래스 포함
필터링 X 불가 O 레벨별/패턴별 검색

 

▶ sysout이 문제가 되는 실제 상황

· 운영 서버에서 sysout 찍으면 표준 출력(콘솔)에 섞여서 로그 관리가 안 됨
· 성능도 느리고, 요청량 많은 실 서버에서 병목 가능성
· 로그 파일로 저장되지 않기 때문에 장애 분석 불가

=> sysout은 "개발 중 임시 디버깅용" 으로만 잠깐 쓰는 게 맞음
=> 실제 서비스에서는 무조건 log 사용