본 포스팅은 김영한 강사님의 인프런 강의 "스프링 MVC 1편"을 정리한 포스팅으로 강의 자료에서 사용한 자료를 사용했음을 밝힙니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
어떠한 정보를 출력하고 싶을 때 로깅 라이브러리를 사용하여 로그를 출력한다.
로그를 사용하기 위해서는 인터페이스인 SLF4J에서 LogBack과 같은 로그 라이브러리를 사용한다.
사용 방법은 다음과 같이 Logger를 생성하고 로그를 사용하면 된다.
@Controller
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());//내 클래스를 지정해줌
@RequestMapping("/log-test")
private String logTest() {
log.info("hello world");
return null;
}
}
아니면 @Slf4j 어노테이션을 사용해도된다.
@Controller
@Slf4j
public class LogTestController {
@RequestMapping("/log-test")
private String logTest() {
log.trace("log trace");
log.debug("log debug");
log.info("log info");
log.warn("log warn");
log.error("log error");
return null;
}
}
"/log-test"로 요청이 들어오면 "hello world"라는 문자를 가지고 있는 로그가 출력된다.
2023-02-25T01:16:17.619+09:00 INFO 18124 --- [nio-8080-exec-2] h.springmvc.basic.LogTestController : hello world
순서대로 시간, 프로세스 아이디, 쓰레드, 컨트롤러, 데이터를 출력한다.
이렇게 로그는 많은 정보를 제공해주기 때문에 매우 유용하다.
로그는 출력할 때 레벨을 설정할 수 있다. 아래의 처럼 레벨을 정해서 출력해보면
@Controller
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());//내 클래스를 지정해줌
@RequestMapping("/log-test")
private String logTest() {
log.trace("log trace");
log.debug("log debug");
log.info("log info");
log.error("log error");
log.warn("log warn");
return null;
}
}
그런데 5개의 로그를 출력하도록 했는데 세 개의 로그만 나오고 있다.
로그 레벨은 TRACE -> DEBUG -> INFO -> WARN -> ERROR 순서이다.
기본 값이 INFO이기 때문에 INFO와 하위 레벨 로그를 출력하는 것이다.
이는 application.properties에서 로그 레벨을 설정해서 출력 로그를 조정할 수 있다.
다음과 같이 trace로 설정하면 trace 하위 레벨을 모두 볼 수 있다.
logging.level.hello.springmvc=trace
debug로 설정하면 debug와 그 하위 로그 레벨을 출력할 것이다.
개발 서버에서는 debug로 두고 운영 서버에서는 info 레벨로 세팅한다.
그런데 로그에 어떠한 변수를 출력하고 싶을 때는 다음과 같이 하면 안된다.
log.trace("log test = " + test);
로그 레벨을 info로 설정했을 때는 trace가 출력되지 않는데 연산은 일어나기 때문에 불필요한 연산이 추가된 것이기 때문이다.
그래서 다음과 같이 사용한다.
log.trace("log test = {}", test);
'공부 > Spring' 카테고리의 다른 글
[Spring] Bean Validation (@Validated, @Valid 사용법) (0) | 2023.03.08 |
---|---|
[Spring][인프런 스프링 MVC] @ModelAttribute와 검증 (Validation) (0) | 2023.03.07 |
[Spring][인프런 스프링 MVC] 스프링 MVC HTTP 요청, 응답 여러가지 방법 (0) | 2023.03.05 |
[Spring][스프링 MVC 1편] 스프링 MVC 어댑터 패턴 (controller v5) (0) | 2023.03.04 |
[Spring][인프런 스프링 MVC] MVC 구를 직접 개선해가며 스프링 MVC 구조를 이해하기 (controller v1~v4) (0) | 2023.03.01 |
댓글