Spring Logging

김두현·2023년 8월 2일
3

Spring

목록 보기
11/13
post-thumbnail

❕로그(Log)란?

발생한 행위에 대한 정보를 시간에 따라 남겨둔 데이터

아래는 로그의 예시이다.

2023-08-03T02:33:29.377+09:00  INFO 4471 --- [  restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2023-08-03T02:33:29.436+09:00  INFO 4471 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2023-08-03T02:33:29.451+09:00  INFO 4471 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-08-03T02:33:29.456+09:00  INFO 4471 --- [  restartedMain] h.itemservice.ItemServiceApplication     : Started ItemServiceApplication in 0.842 seconds (process running for 1.123)

기본적으로 시간, 로그 레벨, 프로세스 ID, 쓰레드 네임, 클래스 네임, 로그 메시지 형식을 갖는다.


❕로그를 사용하는 이유

로그는 System.out.println()과 마찬가지로 console에 출력된다.
그렇다면 왜 로그를 사용할까?

로깅 레벨을 통해 정보를 관리하고, 문자열 작업 등으로 인한 성능 저하를 방지한다.
또한 로그 포맷팅, 저장, 환경에 따른 설정이 가능하다.

어떻게 정보 관리와 성능 저하 방지가 가능한지는 아래에서 알아보자.


❕로그 사용 방법

로그 선언

아래와같이 Logger 클래스 선언을 통해 로그를 선언할 수 있다.

또는 lombok 라이브러리를 통해 @Slf4j 어노테이션만으로 간편하게 로그 선언이 가능해진다.

로그 호출

아래와같이 log.info()를 통해 로그를 사용할 수 있다.
{}가 두 번째 인자의 문자열로 치환된다.


❕로그 레벨

로그 레벨은 로그의 중요도를 나타낸다. 종류는 다음과같다.

TRACE << DEBUG << INFO << WARN << ERROR

예를 들어 로그 레벨을 INFO로 설정하게 되면, INFO 이상의 중요도를 가진 로그만 출력된다. 즉 INFO, WARN, ERROR가 출력된다.

  • 일반적으로 로컬 및 개발 서버에서는 DEBUG, 운영 서버에서는 INFO로 설정한다.

레벨 설정 방법

레벨 설정은 application.yml 파일에서 아래와같이 진행한다.
위의 경우 코드만으로 알 수 있겠지만, TRACE 이상의 중요도를 가진 로그만 출력하게 된다.

아래 코드를 호출한 결과를 살펴보자.

2023-08-03T03:13:33.892+09:00 TRACE 4732 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController      : trace log = plz enjoy my blog🥰
2023-08-03T03:13:33.892+09:00 DEBUG 4732 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController      : debug log = plz enjoy my blog🥰
2023-08-03T03:13:33.892+09:00  WARN 4732 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController      : warn log = plz enjoy my blog🥰
2023-08-03T03:13:33.892+09:00  INFO 4732 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController      : info log = plz enjoy my blog🥰
2023-08-03T03:13:33.892+09:00 ERROR 4732 --- [nio-8080-exec-1] h.springmvc.basic.LogTestController      : error log = plz enjoy my blog🥰

❕올바른 로그 사용법

로그 레벨을 INFO로 설정했을 경우, 아래 두 코드는 어떤 차이를 가질까?

log.debug("data = " + msg);//1번

log.debug("data = {}", msg);//2번

1번 코드의 경우, 문자열 덧셈 연산이 실행이 된다.
그러나 2번 코드의 경우, 의미없는 연산이 발생하지 않아 성능 저하가 방지된다.
앞서 언급한 로그를 사용하는 이유 중 하나이다.


참고 자료

https://www.inflearn.com/course/스프링-mvc-1


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

2개의 댓글

comment-user-thumbnail
2023년 8월 2일

좋은 글 감사합니다. 자주 올게요 :)

1개의 답글