@RestController
문자를 return 하면 String이 그대로 반환됨 (소스코드도 ok로 출력)
@Controller
return은 view name이 반환되는 것
package hello.springmvc.basic;
// slf4j 사용하기 -> @Slf4j 사용해도 됨
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
System.out.println("name = " + name);
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);
return "ok";
}
}
// Log Level 순서 (기본값 = info)
// application.properties에서 설정 가능
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);
# application.properties
logging.level.hello.springmvc=[Log level]
실제 서비스 되는 서버에서는 info level을 주로 사용 (trace, debug 로그를 안찍기 위해)
-> System.out.println은 무조건 로그를 남긴다는 단점이 존재함
아래와 같은 환경이라고 생각해보자
1. log.trace(" trace log=" + name);
2. log.trace("trace log={}", name);
logging.level.hello.springmvc=info
둘의 차이는 무엇인가
1. Log Level에 맞지 않음에도 연산이 되면서 쓸모 없는 리소스를 사용하게 됨.
2. 로그 출력 레벨을 info로 하면 의미없는 연산이 발생하지 않음
추가적으로 콘솔에만 출력하는 것이 아닌 파일이나 네트워크 등에 별도로 로그를 남길 수 있음.
System.out.println() 말고 log 쓰자..