1. Logging
개발을 진행할 때 많은 분들이
System.out.println()을 이용하여 콘솔에 결과를 찍어봅니다.
에러 발생시, 간단한 테스트 등 많은 사유로 편하게 찍어보는데요.
하지만 운영시스템에서는 별도의 로깅 라이브러리를 사용해서 로그를 출력합니다.
로그 사용시 장점으로는 아래와 같습니다.
- 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
- 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
- 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다.
- 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
- 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한다.
이 글에서는 간단하게 사용방법에 대해서 알아보겠습니다.
2. 로깅 라이브러리
스프링부트 사용 시에 기본적으로 spring-boot-starter-logging 라이브러리가 포함됩니다.
스프링부트 로깅 라이브러리는 SLF4J, Logback을 기본적으로 사용합니다.
수 많은 로그 라이브러리가 있지만
그것들을 통합해서 인터페이스로 제공하는것이 SLF4J입니다.
따라서 SLF4J는 인터페이스이고, 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 됩니다.
실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용합니다.
3. 로그의 선언 및 호출
로그를 찍기 위해서는 아래와 같이 선언해주면 됩니다.
private final Logger log = LoggerFactory.getLogger(getClass());
위와 같이 선언해서 사용하면 되는데
사실 롬복을 이용하여 편하게 @SLF4J를 CLASS단에 선언해주면 저 과정도 필요 없습니다.
로그의 호출은 간단합니다. 아래와 같습니다. (로그 레벨은 밑에서 따로 다루겠습니다.)
String data = "dataA";
log.info(" info log={}", data);
위 코드는 {}자리에 data가 치환되어 출력이 됩니다.
즉 info log=dataA 이렇게 출력이 되죠
여기서 주의사항이 하나 있습니다.
아래의 코드를 보겠습니다.
String data = "dataA";
log.info(" info log={}", data);
log.info(" info log=" + data);
출력결과는 사실 똑같습니다만 아래처럼 문자열 연산을 사용하면 안됩니다.
로그를 사용하지 않아도 문자열 계산 로직이 먼저 실행되기 때문입니다.
이런 방식이면 로그 사용 전부터 연산으로 인해 cpu, 메모리 등 낭비가 생기게 됩니다.
따라서 윗줄처럼 사용합시다.
4. 로그 포멧
로그 포멧을 잠깐 보고 가겠습니다.
로그를 찍게되면 아래와 같이 찍히게 되는데요
각각 무엇을 의미하는지 알고 있으면 도움이 됩니다.
순서대로
시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지를 나타냅니다.
이를 통해 각종 정보 파악 및 대응을 빠르게 할 수 있습니다.
5. 로그 레벨 및 설정
로그 레벨에는 5가지가 있습니다.
TRACE > DEBUG > INFO > WARN > ERROR
이렇게 5가지의 레벨로 로그가 찍히게 되는데 로그 레벨을 설정해서 원하는 레벨 까지만 찍을 수 있습니다.
DEBUG로 설정하게 되면 DEBUG 이하 레벨의 로그만 나오게 됩니다.
설정은 application.properties 파일에서 하시면 됩니다.(혹은 YML 파일 (이 글에서는 properties 파일 기준입니다.))
아무 것도 설정하지 않으면 디폴트는 INFO 입니다.
아래는 application.properties 파일 설정 정보입니다.
첫 줄처럼 전체 로그를 설정할 수도 있고
두번째 줄처럼 패키지와 그 하위 로그 레벨을 설정할 수도 있습니다.
보통 개발 서버는 debug 출력, 운영 서버는 info 출력합니다.
마무리
그동안 System.out.println()을 이용하여 개발을 하고 있었다면
LOG로 한번 바꿔보는 것은 어떨까요?
실제로 성능도 앞서고 확인할 수 있는 정보도 많아 유용합니다.
특히 실무에서는 LOG를 찍으니 미리미리 연습해보는 것도 좋습니다.
어렵지 않으니 LOG를 사용하여 효율적이고 생산성있는 개발을 해봅시다.
'Spring(boot)' 카테고리의 다른 글
bean validation (0) | 2024.09.07 |
---|---|
Springboot-Gradle 프로젝트 build, out 폴더 (1) | 2024.02.06 |
스프링의 웹 스코프(Web Scope) 이해하기: Request Scope (0) | 2024.01.19 |
스프링의 빈 스코프(bean scope) 이해하기 (0) | 2024.01.18 |
스프링의 빈 생명주기 콜백 방법과 권장 사항 (0) | 2024.01.16 |