스프링부트의 로그 시스템
스프링부트는 기본라이브러리에 slf4j 라는 로그 인터페이스를 가지고 있다. 이는 스프링 부트가 다양한 로그라이브러리를 스프링에서 사용할 수 있도록 하기 위함이다.
개발자가 다른 로그 구현체 라이브러리를 사용할수도 있고 기본으로 스프링부트가 제공하는 logback을 사용할 수 있다.
로그 선언
org.slf4j.Logger;
org.slf4j.LoggerFactory;
private final Logger log = LoggerFactory.getLogger(getClass());
slf4j의 LogFactory로부터 getLogger를 통해 로거를 받으면된다.
롬복을 사용할 경우 별도로 인스턴스를 생성할 필요없이 @slf4j애노테이션을 클래스에 붙이면된다.
로그 출력내용
로그라이브러리를 사용하면, 로그시간, 레벨, 프로세스ID, 쓰레드명, 클래스명, 로그메세지
2023-05-02T16:32:30.770+09:00 DEBUG 21776 --- [nio-8080-exec-1] c.a.s.basic.LogTestController : debug name=Spring
2023-05-02T16:32:30.772+09:00 INFO 21776 --- [nio-8080-exec-1] c.a.s.basic.LogTestController : info name=Spring
2023-05-02T16:32:30.773+09:00 WARN 21776 --- [nio-8080-exec-1] c.a.s.basic.LogTestController : warn name=Spring
2023-05-02T16:32:30.773+09:00 ERROR 21776 --- [nio-8080-exec-1] c.a.s.basic.LogTestController : error name=Spring
로그의 사용
로그의 단계는 trace-debug-info-warn-error로 이뤄진다.
개발모드에서는 보통 확인코자 하는 패키지를 debug로 설정 출력된다.
배포모드에서는 보통 info로 설정한다.
로그 레벨 설정 이유
로그 레벨에 대한 설정은 개발단계인가 배포단계에 따라 확인해야하는 내용이 다르게 설정할 수 있기에 중요하다.
개발 단계에서 세세하게 확인이 필요한 데이터는 log level을 debug나 trace등으로 남겨확인한다.
배포 이후에는 이러한 데이터들이 운영중인 시스템에 남을 경우 불필요한 로그가 과도하게 남아 용량문제 뿐 아니라 로그의 가독성또한 떨어지기 때문에 필요한 내용만 남기도록 로그의 레벨을 설정해야한다.
로그 레벨 설정방법
application.properties에 로그 레벨을 설정할 수 있다.
logging.level.root=info 전체로그레벨을 설정할때이는 이렇게 하고
특정 패키지의 로그레벨은 logging.level.패키지경로=레벨로 설정할 수 있다.
스프링에서 로그라이브러리를 사용하는 이유
- 로그의 정보
로그시간, 쓰레드정보등 부가 정볼르 자동으로 작성해준다. - 개발서버와 운영서버의 출력내용 조정가능
개발에서는 로그레벨 설정은 더 자세하게 하고
운영에서는 로그레벨을 필요한 부분만 나오게 하여
운영에 불필요한 로그를 제한할 수 있다.- 로그내용의 관리
시스템 콘솔은 별도 파일로 관리할 수 없으나
로그라이브러리를 사용할 경우 파일로 내보내고 특정 내용이나 특정 일자등 다양한 조건으로 파일을 분리할 수 있다. - 성능
시스템콘솔로 남기는 것보다 내부버퍼링이나 멀티쓰레드등 성능면에서 로그라이브러리가 호율적이다.
- 로그내용의 관리
- 0ca2032 본인참고용(private리포지토리)
'프로그래밍 > java' 카테고리의 다른 글
[스프링] 스프링 빈으로 등록된 컴포넌트의 동시성문제 (쓰레드로컬) (0) | 2023.04.27 |
---|---|
[spring] 스프링 AOP는 언제 사용하지 (0) | 2023.04.27 |
[spring AOP] 어드바이스의 종류 (0) | 2023.01.31 |
[spring] spring AOP (0) | 2023.01.19 |
[spring] spring data rest (0) | 2022.10.25 |