보면 logback과 slf4j가 있는데 둘다 로그라이브러리이다.
로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제
공하는 것이 바로 SLF4J 라이브러리다.
쉽게 이야기해서 SLF4J는 인터페이스이고, 그 구현체로 Logback 라이브러리를 선택한 것이다.
@RestController
public class LogTestController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring ";
logger.trace("trace log = {}", name);
logger.debug("debug log = {}", name);
logger.info("info log = {}", name);
logger.warn("warn log = {}", name);
logger.error("error log = {}", name);
return "ok";
};
}
그리고 해당 로그를 사용하면 위와같은 사진을 만나볼 수 있는데 그냥 print를 찍는것과는 다르게 시간, 프로세스 번호, 쓰레드 풀에서 가져온 쓰레드 등 굉장히 다양한 정보가 표시된다.
로그가 출력되는 포멧은 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지
그리고 logger.info("trace log = {}", name);
에서 {}
를 더 쓰고 변수를 더 사용하면 그게 치환되는 것이다.
logger.info("trace log = {}, {}", name, name2);
# hello.springmvc 패키지와 그 하위 레벨 로깅 설정
logging.level.hello.springmvc=trace
LEVEL: TRACE > DEBUG > INFO > WARN > ERROR
개발 서버는 debug 출력
운영 서버는 info 출력(default 왜냐하면 기본이 아래와 같이 설정되어있기 때문이다.)
loggin.level.root=info
private Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class)
@Slf4j : 롬복 사용 가능
private final Logger logger = LoggerFactory.getLogger(getClass());
이렇게 생성자를 작성하지 않아도 된다.log.debug("data="+data)
log.debug("data={}", data)