-
로깅Spring/MVC1-스프링MVC 기본기능편 2023. 6. 14. 10:27728x90
개념
보통 어플리케이션을 개발하면서 다양한 로그를 남기는데, 우리가 흔히 알고 있는 System.out.println()의 경우,
필요하지 않는 경우네도 정보를 출력하게 된다. 이는 대용량 서비스시에 서버의 장애를 낳을 수 있는 요인이 될 수 있다.
하지만 서버를 가동하면서 필요한 정보를 남기는 logging은 반드시 필요하기 때문에, 각각의 개발환경에 맞는 log 레벨을 지정해주고 이를 관리할 필요가 있다.
스프링 부트의 로깅 라이브러리
스프링부트는 다음의 로깅 라이브러리를 기본으로 제공한다.
- SLF4J - http://www.slf4j.org
- Logback - http://logback.qos.ch
로그라이브러리는 Logback, Log4J, Log4J2 등 많은 라이브러리가 있지만, 이것들을 통합해서 인터페이스로 제공하는 것이바로 SLF4J 라이브러리이다.
실무에선 스프링부트가 기본으로 제공하는 라이브러리를 많이 활용한다.
로그 선언
private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(Xxx.class); @Slf4j // lombok에서 제공하는 어노테이션기반의 선언
로그호출
log.trace("trace log = {}", variable); log.debug("debug log = {}", variable); log.info("info log = {}", variable); log.warn("warn log = {}", variable); log.error("error log = {}", variable);
println은 단순히 그 값을 출력하고 레벨단위로 나누어 관리할 수 없다.
하지만, log라이브러리를 사용하면, 출력값이 훨씬 더 많은 정보를 담고 있고, 레벨단위로 나누어 관리도 가능하며,
필요에 따라 저장하는 기능까지 갖추고 있다. 때문에 print를 사용하기 보단 log라이브러리를 활용하자
로그가 보여주는 포멧
2023-06-12T20:26:35.527+09:00 INFO 41036 --- [nio-8080-exec-2] c.springmvc.basic.LogTestController : info log =Spring
시간정보 / 로그레벨 / 프로세스 아이디 / 쓰레드명 / 클래스명 / 로그 메세지 등 다양한 정보를 보여주고 있다.
로그레벨 및 설정 방법
로그 레벨은 크게 중요도에 따라 5단계로 구분한다.
TRACE > DEBUG > INFO > WARN > ERROR
보통, 개발 서버는 debug 레벨부터 출력하여 확인을 하고,
운영 서버의 경우에는 INFO 레벨부터 출력을 한다.
해당 프로잭트별로 로그레벨을 설정하는 방법은 application.properties 에서 설정하는 방법이 있다.
#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정 방법
logging.level.hello.springmvc=debug로그의 올바른 사용 방법
log.info(message, variable)
log의 다양한 메소드들은 위에서 보듯이, 메세지와 이에 들어갈 변수를 매개변수로 받는 방법을 주로 사용한다.
log.trace("trace log = {}", name);
문자열이기 때문에 + 연산자를 사용해도되긴하나,
자바특성상 + 연산자를 사용하면, 보여지지 않아도되는 log에도 내부적으로 + 연산을 수행하기 때문에 불필요한 작업을 수행하게 된다.
때문에 앞으로는 항상 문자열과 이에들어갈 변수를 매개변수로 받는 방법을 사용하자!
'Spring > MVC1-스프링MVC 기본기능편' 카테고리의 다른 글
요청 매핑 (0) 2023.06.17