1. 목적
애플리케이션에서 로그를 남길 때 System.out이 아닌 Logger(주로 Logback)를 사용하는 이유를 정리하고, 두 출력 방식의 차이점을 분석하며 성능 및 관리 측면에서의 장단점을 이해하기 위함이다.
2. System.out과 Logger의 차이점
1) 출력 방식의 차이
- System.out
- 표준 출력 스트림을 사용하여 로그를 출력.
- 출력된 로그는 톰캣 같은 서버의 경우 catalina.out 파일에 저장됨.
- 모든 로그가 한 파일에 섞여 들어가, 로그 관리와 필터링이 어렵다.
- Logger
- 로깅 라이브러리(Logback, Log4j, SLF4J 등)를 통해 로그를 출력.
- 출력 레벨(예: INFO, DEBUG, ERROR 등)을 구분하여 관리 가능.
- 다양한 출력 대상(파일, 콘솔, DB, 원격 서버 등)을 설정 가능.
2) 성능 차이
- System.out
- IO 처리가 비효율적이며, 동기적으로 처리되어 성능 저하의 원인이 될 수 있다.
- 병렬 환경에서 여러 쓰레드가 동시에 로그를 출력할 때 경합 상태(race condition)가 발생할 수 있다.
- Logger
- 비동기 로깅 설정을 통해 IO 작업을 효율적으로 처리할 수 있다.
- 내부 버퍼링과 최적화를 통해 로그 출력 성능이 더 뛰어나다.
3) 관리 및 확장성
- System.out
- 로그 파일을 원하는 형식으로 관리하기 어려움.
- 로그 레벨 필터링이나 로그 분할(예: 하루 단위 파일 분리) 기능이 없음.
- Logger
- 로그 레벨(INFO, WARN, ERROR 등)과 출력 형식을 자유롭게 설정 가능.
- 파일 분할(rolling file) 및 로그 집계 도구와의 통합이 용이.
- JSON, XML 형식 등으로 로그 출력 포맷을 변경할 수 있어 다양한 시스템과 통합 가능.
3. 왜 Logger를 선택해야 하는가?
- 성능
- 비동기 처리와 내부 최적화를 통해 애플리케이션의 성능에 미치는 영향을 최소화한다.
- 관리 및 분석
- 로그 레벨, 형식, 출력 위치 등을 유연하게 설정할 수 있어 로그를 관리하고 분석하기 편리하다.
- 확장성
- Logback과 같은 로깅 라이브러리는 다양한 출력 대상을 지원하며, 대규모 애플리케이션에서도 효과적으로 사용할 수 있다.
- 표준 준수
- 로깅 프레임워크는 애플리케이션에서 표준적인 로그 관리를 가능하게 해준다.
- SLF4J를 사용하면 다른 로깅 라이브러리로의 교체가 쉽다(Logback ↔ Log4j).
System.out 가 아닌 Logger(Logback) 를 왜 사용할까?
글의 목적 로그를 남길 때 System.out 이 아닌 Logger를 이용해서 남기라고 합니다. 그 이유를 정리하고 실제 시간을 비교해 보고자 글을 작성합니다. 구조 System.out 과 Logger의 출력 방식을 분석해보며
velog.io
'spring > 그 외 알게 된 것' 카테고리의 다른 글
| 어노테이션 정리 (0) | 2024.06.29 |
|---|---|
| 프록시란 (0) | 2024.06.26 |
| jar와 war (0) | 2024.06.25 |
| JDBC와 JPA (0) | 2024.06.25 |
| URI 와 URL은 뭐가 다를까 (0) | 2024.06.18 |