스프링에서 필요한 정보를 출력하는 방법에는 2가지가 있다. System.out.println() 같은 시스템 콘솔을 사용하는 것과 로그를 출력하는 것이다. 이번 시간에는 로그 사용 방법에 로그의 장점에 대해 알아본다.

스프링 부트 라이브러리를 사용하면 spring-boot-starter-logging 라이브러리가 포함되기 때문에 별도의 라이브러리를 추가할 필요가 없다.
로그 라이브러리로는 Logback, Log4J, Log4J2 등 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 SLF4J이다. 쉽게 말하자면, SLF4J는 인터페이스고, 그 구현체로 Logback같은 로그 라이브러리를 선택하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용한다.
@Slf4j
@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";
}
}
로그 선언
로그 호출

로그를 호출하는 방법에는 2가지가 있는데 직접 호출해보면 확실한 차이를 알 수 있다. System.out.println은 메시지만 출력하지만 log.info는 시간, 프로세서 ID, 현재 실행한 쓰레드, 현재 컨트롤러 이름, 메시지와 같은 여러 정보를 출력한다.
로그 레벨
1.trace 2.debug 3.info 4.warn 5.error
로그 레벨의 중요도이다. 스프링은 기본적으로 info, warn, error를 출력한다. 스프링이 기본으로 지원하는 라이브러리에 trace와 debug 로그가 매우 많기 때문에 추천하지 않는다. info는 요청 메시지가 발생할때 warn은 서버가 위험하다는 메시지를, error는 서버에 에러가 발생했다는 의미를 부여할 수 있다.
#전체 로그 레벨 설정(기본 info)
logging.level.root=info
#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug
로그 레벨은 application.properties에서 설정할 수 있다. 보통 개발에서는 로그 레벨을 debug까지, 운영에는 info까지 설정한다.
올바른 로그 사용법
System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등)출처: 스프링 MVC 1편 (김영한)