SLF4J vs System.out.println

참코딩·2024년 12월 5일

System.out.println

표준 출력에 메시지를 출력하는 방법으로, 로깅 수준이나 출력 형식을 설정할 수 없으며 콘솔에만 메시지를 출력함.

’표준 출력 스트림’을 사용하기 때문에 비동기적이지 않고, I/O 블로킹이 발생할 수 있다.
시간이 많이 걸리고 많은 출력이 발생하는 경우 성능 저하를 일으킬 수 있음

표준 출력 스트림 관련 자료
https://shoark7.github.io/programming/knowledge/what-is-standard-stream

또한 System.out 과 System.err 가 다른 출력 Stream 으로 동작하기 때문에 둘을 혼용하는 경우 순서가 보장되지 않을 수 있다. (slf4j 는 싱글 스레드에선 순서 보장)

SLF4J (Simple Logging Facade for Java)

SLF4J는 로깅 수준을 설정할 수 있고, 불필요한 로깅 메시지가 출력되지 않도록 제어할 수 있다. info, debug 등등 수준을 나눠서 출력 제어가 가능

다양한 로깅 프레임워크에 대한 인터페이스 역할을 하는 라이브러리로 실제구현체 (logback, log4j) 등에 따라 성능이 달라지는데,
대부분의 로깅 프레임워크는 로깅 메시지를 조건부로 출력하기 때문에 불필요한 로그 메시지를 처리하지 않거나 출력하지 않음

보통 로깅 프레임워크는 비동기 로깅을 지원하는 경우가 많아, 로깅을 별도의 스레드에서 처리할 수 있다.
-> 이를 통해 I/O 작업으로 인한 성능 저하를 최소화 할 수 있음

참고 자료

profile
백엔드 개발자 입니다.

0개의 댓글