본문 바로가기

spring/그 외 알게 된 것

왜 System.out 대신 Logger를 사용해야 할까?

 

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를 선택해야 하는가?

  1. 성능
    • 비동기 처리와 내부 최적화를 통해 애플리케이션의 성능에 미치는 영향을 최소화한다.
  2. 관리 및 분석
    • 로그 레벨, 형식, 출력 위치 등을 유연하게 설정할 수 있어 로그를 관리하고 분석하기 편리하다.
  3. 확장성
    • Logback과 같은 로깅 라이브러리는 다양한 출력 대상을 지원하며, 대규모 애플리케이션에서도 효과적으로 사용할 수 있다.
  4. 표준 준수
    • 로깅 프레임워크는 애플리케이션에서 표준적인 로그 관리를 가능하게 해준다.
    • SLF4J를 사용하면 다른 로깅 라이브러리로의 교체가 쉽다(Logback ↔ Log4j).

https://velog.io/@biddan606/Springboot-%EB%A1%9C%EA%B7%B8%EB%A5%BC-%EB%82%A8%EA%B8%B8-%EB%95%8C-System.out-vs-Logger-%EB%B6%84%EC%84%9D

 

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