System.out을 사용하면 안된다고?

Taewoo·2023년 8월 28일
0
post-thumbnail

회사에서 개인시간에 starter-p6spy와 Spring Boot 3.x.x 버전의 쿼리 로깅 설정법을 찾아 보고 있었다.

Hibernate 로깅

decorator.datasource.p6spy.logging 설정에 네 가지 옵션이 있었다.

  • slf4j
  • custom
  • file
  • sysout

System.out 출력을 사용하지 않는 이유가 궁금해졌다.

원래 잘 사용을 안했고 어느 강의에서나 log4j 라이브러리를 사용하니 나도 따라 썻었다.

정보를 담을 수 없다.

  • 개발 환경에 따라 로그 레벨을 설정할 수 없다.
    • Trace
    • Debug
    • Info
    • Warn
    • Error
    • Fatal
  • 예를 들면 운영 환경에서 출력을 제거하고 싶으면 System.out.print() 코드를 일일이 제거 해야한다.

로그에 필요한 정보가 없다.

  • System.out은 단순히 Console에 Output을 내는 용도라서 로깅 위치, 발생 시각 등의 기본 적인 정보들이 없다.

휘발성이다.

  • 운영환경에서 트러블 슈팅과 더 나은 유지보수를 위해 로그 저장은 필수적이다.
  • 하지만 System.out은 단순히 문자를 찍는 용도라 저장할 수 있는 기능이 없다.

성능 저하

println 메서드에는 synchronized 블록이 있는 것을 확인할 수 있다.

이는 멀티스레드 환경에서 synchronized로 인해 스레드가 점유권을 얻기 위해 대기해야 함으로 운영 환경에서 치명적이다.

0개의 댓글