앞으로 로그를 사용할 것이기 때문에, 이번시간에는 로그에 대해서 간단히 알아보자.
운영 시스템에서는 System.out.println()
같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로 깅 라이브러리를 사용해서 로그를 출력한다.
참고로 로그 관련 라이브러리도 많고, 깊게 들어가면 끝이 없기 때문에, 여기서는 최소한의 사용 방법만 알아본다.
로깅 라이브러리
스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging
)가 함께 포 함된다.
스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다.
로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제 공하는 것이 바로 SLF4J 라이브러리다.
쉽게 이야기해서 SLF4J는 인터페이스이고, 그 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다.
로그 선언
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)
@Slf4j
: 롬복 사용 가능
로그 호출 log.info("hello")
System.out.println("hello")
@RestController
@Slf4j
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.info(" info log={}"+ 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";
}
}
매핑 정보
@RestController
@Controller
는 반환 값이 String
이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다.@RestController
는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다. 따라서 실행 결과로 ok 메세지를 받을 수 있다. @ResponseBody
와 관련이 있는데, 뒤에서 더 자세히 설명한다.테스트
TRACE > DEBUG > INFO > WARN > ERROR
@Slf4j
로 변경로그 레벨 설정
application.properties
#전체 로그 레벨 설정(기본 info) logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정 logging.level.hello.springmvc=debug
올바른 로그 사용법
log.debug("data="+data)
log.debug("data={}", data)
로그 사용시 장점