강사님이 보너스로 로깅에 관해서도 알려주셨다.
팀 프로젝트 할 때 log4j를 통해 print문을 대신해서 로그를 찍었는데 역시 왜 찍는지, print와 뭐가 다른지 모르고 그냥 사용만 하고 있었는데 이번 강의를 통해 조금으 더 알게 되었다. 강사님이 이번 강의에서도 깊게는 다루지 않고 간단하게만 알아본다고 하셨다. 조금 더 깊게 사용하면 어떻게 사용할 수 있는지도 따로 찾아봐야 할 것 같다.
우선, 따로 찾아본 바로는 로그와 print문의 차이로는 print는 바로 출력이 되고 따로 찾아 볼 수는 없지만 log를 찍게 되면 나중에 log 파일을 뒤져 그동안 찍힌 log를 찾아 볼 수 있다고 한다. 이게 아직 활용은 해본 적은 없지만 작년에 학교 수업을 들으면서 Hadoop을 사용할 때 로그 파일을 모아둔 것을 생각하면서 이해하고 있긴 하다.
최소한의 사용 방법을 알아보면 아래와 같다.
스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리가 포함되어 있다. 스프링 부트 로깅 라이브러리는 SLF4J와 Logback 로깅 라이브러리를 사용한다.
로그 라이브러리는 그 종류가 매우 많은데 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리이다.
즉, SLF4J는 인터페이스이고 그 구현체로 Logback과 같은 라이브러리르 선택하면 되는 것이다. 실무에서는 Logback를 주로 사용한다고 한다.
private Logger log = LoggerFactory.getLogger(getClass());
로그 선언은 이렇게 쓰거나
private static final Logger log = LoggerFactory.getLogger(Xxx.class)
이렇게 사용하면 된다고 한다.
조금 더 간단하게 사용하는 법도 있었는데 Lombok 라이브러리를 활용해서 @Slf4j 어노테이션을 활용하는 것이다.
이 어노테이션을 사용하면 따로 로그 선언을 하지 않아도 사용할 수 있게 된다.
log.trace("trace log={}", name);
log.debug("debug log={}", name);
log.info("info log = {}", name);
log.warn("warn log={}", name);
log.error("error log={}", name);
로그는 이런 방식으로 찍어주면 된다.
로그에는 어떤 정보가 출력이 될까?
로그에는 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그메시지가 출력이 된다.
로그 레벨 설정도 가능한데 위에 코드에 적은 순서대로이다. 아운영 서버는 info를 출력하고 개발 서버는 debug를 선언해서 사용한다.
#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug
application.properties에서 로그 레벨을 설정해 줄 수 있다.
root를 통해 기본을 설정할 수 있고 따로 패키지 별로 추가해서 사용할 수도 있다. 디폴트로는 info가 제공된다고 보면 된다.
나는 로그를 그냥 쓰기만 했는데 올바른 로그 사용법이 따로 있었다.
log.info("data={}", name)
이런 식으로 사용하면 된다고 한다.
log.info("data=" + name)
내가 팀 프로젝트할 때 이렇게 사용한 것 같은데 이건 비추천하는 방식이라고 한다. 왜냐하면 연산이 이루어지기 때문에 자원 낭비가 발생한다고 한다. 때문에 가능하면 위와 같은 방식으로 사용해야 할 것 같다.
로그를 사용하면 어떤 점이 좋을까?
로그를 사용하면 각종 정보를 얻을 수 있고 원하는 로그 레벨에 맞추어 원하는 정보만 출력해서 확인할 수 있다. 또, 위에서 내가 찾은 것과 같은 장점도 있다. 단순 출력만 하는 게 아니라 파일이나 네트워크 로그 등을 별도의 위치에 남길 수 있다고 한다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다고 하니 굳이 Print문으로 출력을 할 필요가 없는 것이다. 추가로 print문보다 성능도 좋다고 한다.
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : 요청 매핑 API 예시 (0) | 2022.01.25 |
---|---|
[Spring Boot] : @RequestMapping, 요청 매핑 종류 및 사용법 (0) | 2022.01.25 |
[SpringBoot] : Spring Boot Jar 프로젝트 생성 (0) | 2022.01.25 |
[Spring Boot] : Spring MVC 실용적인 방식 활용 (0) | 2022.01.24 |
[Spring Boot] : Spring MVC 컨트롤러 통합하기 (0) | 2022.01.24 |
댓글