다양한 예제를 실습하면서 System.out.println .
줄여서 sout을 굉장히 많이 사용 해왔다.
IDE의 콘솔창에 작성한 코드가 작동되는지 확인할 때 몹시 유용하게 사용해 왔지만,
sout이 사용된 곳의 위치, 사용된 시간 등 주변 정보를 얻기 어렵다.
또한, 많은 자원을 요한다.
그리고 기록을 콘솔창에만 남기기 때문에 관련 정보를 처리할 수 없다는 단점을 가지고 있다고 한다.
그렇다면, 정보도 얻기 쉽고, 처리할 수 있는 것은 뭐가 있을까
이.름.하.야.
Log!! (로그 파일을 남기거나, 네트워크로 전송도 가능하다고 한다)
다양한 라이브러리가 있다고 하는데
Sl4j 를 사용 해보기로 했다.
타 블로그 글을 보니 아래와 같다고 한다.
slf4j
slf4j와 다른 라이브러리의 가장 큰 차이점은 slf4j는 wrapper라는 것이다.
slf4j를 사용하여 설정에 따라 다른 로깅 라이브러리를 사용할 수 있게 된다.
출처 : https://www.fwantastic.com/2019/12/javautillogging-vs-log4j-vs-slf4j.html
전부 다 알고 시작할 수는 없으니 일단 출발한다.
로그의 세계는 깊은 모양.
Slf4 라이브러리에서 로거를 호출하고 해당 클래스의 기록을 남기도록 했다.
// SOUT
String myName = "Spring";
log.info("info log={}" ,myName);
실행 결과~
두둥!!

System.out.println() 과 다르게 실행 시간, 프로세스ID, 실행한 스레드, 기록이 발생한 위치, 메세지 등의 다양한 정보를 얻을 수 있게 됐다.
레벨
로그에는 레벨이 있고 레벨에 따라 그 용도를 달리 한다고 한다.
// 레벨
log.trace("trace log={}" ,myName);
log.debug("debug log{}", myName);
log.info("info log={}" ,myName);
log.warn("warn log={}" ,myName);
log.error("error log={}" ,myName);

오오.. 신기하다.
그런데 log.trace 와 log.debug 는 콘솔창에 찍히지 않았다. 얘들은 어디로 갔을까?
application.properties 에 아래와 같이 로깅 레벨을 설정 해보자.
hello.springmvc 는 어디서 튀어나온 놈?
= 패키지 이름이다.
logging.level.root= 레벨
이렇게 하면 모든 경로에 로깅이 적용된다.
로깅 레벨을 trace로 하면 숨었던 녀석들이 짜잔~

출력 레벨을 debug로 하면 TRACE는 찍히지 않는다.

TRACE가 레벨이 제일 높고, 그 다음이 디버그, 그 다음이 {info, warn, error} 인 것으로 보인다.
기본 값은 info.
DEBUG 는 개발 용도로
INFO 는 운영 용도로
사용환경과 상황에 맞는 것을 설정 해주면 되는 모양.
로그의 올바른 사용법
log.info("info log" + myName);
로그를 남길 때, 일정 포맷을 지켜도 동작하고, "info log" + myname 식으로 문자열을 합쳐도 동작한다.

그런데 여기서!!!!
로그 레벨은 INFO (혹은 DEBUG)인데 아래와 같이 TRACE에 대한 코드가 있다면
사용하지 않을 로그 레벨인 trace 메서드에 대해
( + ) 즉. 문자열을 합치는 행위(연산) 이 발생하게 된다.
메모리, cpu 등의 자원이 연산에 사용된다.
로깅 레벨이 info, debug 등인데 사용하지 않을 trace 에 대해 불필요한 연산만 하게 되므로 비용이 발생하게 되므로 몹시 비효율적이다. 따라서 + 연산은 하지 않는 것이 좋다.
참조자료
- 인프런_김영한 스프링 MVC 기본편 01
- https://www.fwantastic.com/2019/12/javautillogging-vs-log4j-vs-slf4j.html
'스프링' 카테고리의 다른 글
| JPA_N+1 문제 (0) | 2023.08.08 |
|---|---|
| request 스코프 작성 (0) | 2023.04.07 |
| @Qualifier 단점 - 컴파일 단계에서 오류가 안 잡힘. (0) | 2023.04.06 |
| @Qualifier 단점 - 컴파일 단계에서 오류가 안 잡힘. (0) | 2023.03.31 |
| DI는 생성자 주입으로 하자 (1) | 2023.03.30 |
댓글