📌 로그 사용하기
이번에는 로그 사용법에 대해 알아보자.
SLF4J - http://www.slf4j.orgLogback - http://logback.qos.chSlf4j 는 인터페이스고 이를 구현한 Logback 을 사용한다.
로그를 사용하면 System.out.println 과 달리
시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지를 알 수 있기 때문에 서버를 운영함에 있어서 필수적이다.
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)
로그를 사용하기 위해서는 위 코드를 사용해야한다.
@Slf4j
또는 @Slf4j 에노테이션을 사용해도 무관하다.
package hello.springmvc.basic;
@Slf4j
@RestController
public class LogTestController {
// private final Logger log = LoggerFactory.getLogger(LogTestController.class);
// Slf4j 가 위 코드를 대신해줌.
@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("warn log={}", name);
log.error("error log={}", name);
return "ok";
}
}
간단한 테스트 코드를 작성했다. @RestController 를 사용하면 반환값으로 뷰를 찾지않고 반환값 자체를 HTTP 메시지 바디에 입력된다. 따라서 localhost:8080/log-test 로 들어가면 ok 가 출력된다. 이렇게 해두면 테스트하기 편하다.
📌 로그 레벨
로그에는 레벨이 존재한다.
TRACE > DEBUG > INFO > WARN > ERROR 와 같은 레벨로 되어있고 개발서버는 주로 debug 을 출력하고 운영서버는 INFO 를 출력한다. 기본값은 INFO 다
logging.level.hello.springmvc=debug
// logging.level.경로 = 레벨
로그 레벨을 설정하기 위해서는 application.properties 경로에 위의 코드를 추가해주면 된다.
INFO 를 설정하면 INFO 를 포함한 하위단계인 INFO , WARN , ERROR 가 출력이 된다.
운영서버에서 DEBUG 를 사용하지 않는 이유는 DEBUG 를 사용할시 꼭 필요한 정보가 아님에도 출력이 된다. 또한 너무 많은 정보로 인해서 오히려 원하는 내용을 찾기가 힘들어진다.
📌 올바른 로그 사용법
log.debug("data="+data)
log.debug("data={}", data)
로그를 사용할때는 + 연산으로 출력해서는 안되고 {} 를 이용해야 한다.
+ 를 사용하면 로그 출력 레벨을 info 로 설정해도 "data"+data 코드가 실행이 되어버려서 문자 더하기 연산이 발생한다. 따라서 불필요한 자원을 사용하게 된다.
📌 로그 사용시 장점
System.out.println 에 비해 쓰레드정보 , 클래스이름같은 부가정보를 알 수 있고 로그 레벨에 따라 개발서버는 모든 로그를 출력하고 운영서버는 출력하지 않는 등 상황에 맞게 조절가능하다.
또한 파일로도 로그의 기록을 저장할 수 있고 System.out 에 비해 속도도 빠르다.