
※ 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 사용
'Java > 참고자료' 카테고리의 다른 글
| [Java] JPA vs Spring Data JPA (2) | 2025.08.09 |
|---|---|
| [Java] javax.annotation.Resource 오류 (1) | 2025.01.17 |
| [Java] Date & LocalDate & LocalDateTime 변수를 yyyyMMdd 문자열로 변환 (0) | 2024.09.13 |
| [Java] 특정 문자열 및 빈 값 체크 (0) | 2024.08.29 |
| [Java] Annotation (0) | 2023.08.15 |