jar을 사용하면 /resources/static/index.html 위치에 index.html을 두면 WelcomePage로 인식을 한다.
또 jar은 war과 달리 webapp 디렉토리를 사용할 수 없고, static을 사용한다.
로그 라이브러리는 많은 라이브러리가 있는데 통합해서 인터페이스로 제공하는게 바로 slf4j라이브러리이다. 스프링부트는 구현체로 logback을 선택했다.
// @Slf4j
@RestController
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring";
log.trace("trace log = {}", name);
log.debug("debug log = {}", name);
log.info("info log = {}", name);
log.warn("warm log = {}", name);
log.error("error log = {}", name);
return "ok";
}
}
로그는 trace -> debug -> info 과 같이 레벨 별로 되어있다.
logging.level.<PackagePath>=trace
application.properties에서 설정할 수 있다. (default 는 root-info 레벨이다.)
log.trace("trace log="+name)
처럼 쓸 수 있고 지금 로그 레벨이 info라고 가정하자
원래대로라면 trace 레벨은 출력되지 않지만 자바 언어의 특성상 '+' 연산이 수행되기 때문에 리소스 낭비가 된다.
따라서 log.trace("trace log={} , name)
처럼 함수의 파라미터로 넘기게끔 해야한다.
내부 버퍼링, 멀티쓰레드 등 성능최적화에 맞춰져 있어 System.out 보다 성능이 좋다.
@Controller 의 경우 return value가 String일 경우 viewName을 의미해 해당 파일을 찾는다. @RestController의 경우 말 그대로 String 값을 반환한다.