Jave & Kotlin

Logging 할때 System.out을 지양해야 되는 이유

devLog by Ronnie's 2021. 8. 8. 22:14

Logging 할때 System.out을 지양해야 되는 이유

 

개발을 하다보면 정상적으로 작동을 하는지나 에러등을 확인하기 위해 로그를 확인한다.

처음에 배우는 것이 바로 System.out으로 콘솔에 출력하여 로그를 남겨 확인하는 것인데 실제 운영 시스템에서는 System.out으로 로그를 남기는 경우는 거의 없다.

 

여기까지 아는 사람은 많이 있을 것이지만 정확히 왜 System.out으로 로그를 남기면 안되는지에 대해서는 모르는 사람들도 많다. 어떤 이유에서 System.out을 지양해야되는지 정리한다.

 

1. System.out은 리소스를 많이 사용하여 성능 부하를 초래한다. (로그 라이브러리는 내부 버퍼링, 멀티 쓰레드 등을 지원해서 성능이 System.out 보다 좋음)

 

2. 에러 장애 발생 시 추적할 수 있는 최소한의 정보가 없다. (코드를 작성하여 최소한의 정보를 만들어 줄수는 있지만 직접 코드를 작성해야된다는점..) 아래와 같이 로그 라이브러리를 사용하면 쓰레드 정보, 클래스 이름, 시간, 로그 레벨 등의 정보들을 확인이 가능하다.

3. 로그 내용을 가져오기 힘들다. System.out은 콘솔에 찍는 것일뿐 내용을 따로 로그 파일로 남기는 등에 행위는 하기 힘들다. 로그 라이브러리를 사용하여 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있다. (파일로 남긴다면 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.)

 

4. 로그에 레벨을 정하기 힘들다. 개발환경이나 운영서비스 환경 등에 따라서 로그에 정보가 다르게 보여야 할 수 있다. 로그라이브러리를 사용하면 TRACE > DEBUG > INFO > WARN > ERROR 순으로 제공되는 레벨을 정할 수 있다. 예를 들어 실제 운영하는 서비스 환경에 로그 레벨을 trace로 지정하면 모든 로그가 다 찍히므로 과부하를 일으키거나 성능 저하를 초래하므로 환경에 따라 로그 레벨을 다르게 정의할 필요가 있다.