우주개발

Spring, 로그는 왜 사용하는가 본문

Spring

Spring, 로그는 왜 사용하는가

우주개발 2023. 10. 10. 10:39

Spring 로깅을 알아보자

서비스 운영 시스템에서는 System.out.println()을 사용해서는 안된다.
그러니 라이브러리를 사용해서 로그를 노출시켜야한다.

스프링 부트 사용시 spring-boot-starter-logging이 포함되어 있어 이를 기본으로 사용한다고 한다.

로그 선언

private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)

로그의 레벨

trace < debug < info < warn < error 순으로 레벨이 올라간다

개발서버에서는 debug 레벨로 출력을 하고
운영서버에는 info 레벨로 출려을 한다

resource/application.properties

#전체 로그 레벨 설정(기본 info) 
logging.level.root=info

#hello.springmvc 패키지와 그 하위 로그 레벨 설정 
logging.level.hello.springmvc=debug

logging.level.root의 경우에는 root 레벨에서 info로 설정을 하는 것이다.

root 레벨을 trace나 debug로 설정할 경우, 굉장히 많은 로그가 출력될 수 있으니 주의해야한다.

우리는 우리가 실제로 개발하는 패키지 파일의 로그를 확인해야 하므로

하위 로그 레벨을 설정해야하는 것이다.

올바른 로그를 출력하는 방법

log.debug("data" + data);로 출력을 하면 기본적으로 설정되어 있는 로그레벨 보다 높은 레벨을 설정해도

문자열 연산이 "data"와 data(변수)안에 있는 연산이 실행된다.

이렇게 되었을 때 출력은 되지도 않지만, 연산이 되기 때문에 메모리 리소스를 낭비하게 된다.
따라서 log.debug(" data={}", data);와 같이 로그를 출력해야만 한다.

🤔 그래서 로그를 왜 사용하는가?

  1. 쓰레드의 정보, 클래스 이름 등 부가 정보를 함께 볼수 있으며 출력 모양을 조정할 수 있음
  2. 로그 레벨을 설정해 개발 서버에서는 모든 로그를 출력하고 운영서버에서는 출력하지 않게 하는 가변성이 있다.
  3. System.out 콘솔에만 출력하는 게 아니라 파일이나 네트워크 등의 로그를 별도 위치에 남길 수 있다. 용량에 따라 파일 분할도 가능하다.
  4. 성능이 System.out 보다 좋다.