
개발자들은 문제가 발생했을 때 로그를 보며 많은 시간을 보냅니다. 그러므로 로그는 문제를 해결할 수 있는 단서를 가지고 있기 때문에 매우 중요합니다.
로깅에는 몇 가지 단계가 있습니다.
TRACE : 상세한 로그 레벨로, 애플리케이션의 실행 흐름을 디버깅하기 위해 사용됩니다.
DEBUG : 디버깅 목적으로 사용되며, 애플리케이션의 실행 중에 중요한 정보를 기록합니다.
INFO : 애플리케이션의 주요 이벤트를 기록하는 데 사용됩니다.
WARN : 경고성 메시지를 기록하는 데 사용됩니다.
ERROR : 심각한 오류를 기록하는 데 사용됩니다.
FATAL : 가장 심각한 오류를 기록하는 데 사용됩니다.
지금부터 로그를 사용해 보겠습니다.
application.properties에 log 레벨을 debug로 해보겠습니다.
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
logging.level.org.springframework=info
logging.level.soowan.study.springboot.myfirstwebapp=debug
import org.slf4j.Logger; 를 사용해서 logging을 해보겠습니다.
package soowan.study.springboot.myfirstwebapp.login;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
private Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping("/login")
public String gotoLoginPage(@RequestParam("name") String name, ModelMap model) {
model.put("name", name);
logger.debug("Request Param is {}", name);
System.out.println("Request Param is " + name);
return "login";
}
}

log가 제대로 출력된 걸 볼 수 있습니다.
그렇다면 log 레벨을 info로 변경을 하고 요청을 한다면 어떻게 될까요??
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
logging.level.org.springframework=info
logging.level.soowan.study.springboot.myfirstwebapp=info

LoginController에서 log.debug 로 파라미터를 logging하기 때문에 log가 찍히지 않았습니다.
application.properties에서 로그 레벨 설정을 info 로 하면 info 보다 심각한 오류들만 나오게 됩니다. debug는 info보다 상세한 내용을 제공하기 때문에 log가 찍히지 않았던 것이죠.
이렇게 많은 로그 레벨을 사용해서 적절하게 사용할 수 있어야합니다.
예를들어, 개발환경에서는 debug 레벨을 사용하거나 프로덕션에서는 info를 사용합니다.
기본적으로 spring-boot-starter-web은 spring-boot-starter-logging을 전이 의존하고 있습니다.
Spring Boot가 사용하는 기본 로깅 프레임워크는 SLF4j를 사용하는 Logback입니다.
이번 기록에서는 간단하게 로깅에 대해 알아보았습니다.
나중에 개발 고수가 된다면 더 깊은 내용의 로깅으로 돌아오겠습니다~