본문 바로가기
Back-End/Spring

로깅 라이브러리(@Slf4j) 사용시 log 메서드의 올바른 사용법

by 어렵다어려웡 2021. 12. 18.

애플리케이션 계층에서 우리가 로그를 남길 때 사용하는 방식은 다 다르다.

 

이번에 강의를 들으면서 알게된 방법이 있어서 공유하게 되었음.

 

직접 예시 코드를 작성해본다..

String test = "test";

log.info("log Test = " + test);    // 1

log.info("log Test = {} ", test);  // 2

 

정확하진 않지만 대표적으로 로그 라이브러리를 사용할 떄 위와 같은 2가지 방식으로

쓰는 것으로 알고 있다. 

 

나 같은 경우 1번 방식이 손에 익었기 떄문에 주로 1번방식을 사용했는데,

결론부터 말하자면 1번방식을 사용하면 안된다는 것이다.

 

이것은 자바언어와 관련이 깊은데, 1번 방식이 이루어지는 과정은 이러하다.

1. 'test' 라는 변수에 값이 치환이된다 

2. "log Test = " 문자열과 'test' 변수의 치환된 문자열이 합쳐진다.

3. 합쳐진 문자열을 가지고 있는다.

 

여기서 중요한 점은 2번과정이다.

두 개의 문자열이 연산(합침)이 이루어 진다는 것이다.

그러면 CPU, 메모리를 사용하게 되는 데,

만약 이 코드가 Trace 레벨이고 나의 애플리케이션의 기본 로깅레벨이 info 레벨이라면?

 

호출되지도 않는 로그메서드임에도 불구하고 문자열 연산은 이루어진다는 것.

그렇다면 원하지 않는 리소스를 사용하게 되는셈이다..

 

 

2번 방식의 경우 info 메서드를 호출하면서 그저 파라미터로 'test' 를 던져주는 것이므로

로그 레벨이 다르다면 메서드를 호출하지 않으므로 필요없는 리소스를 낭비하게 되지 않는다..