실무에서 System.out.println(); 으로 로그 찍으면 되겠냐

로그 라이브러리는 다양한데 요놈들은 또 이걸 인터페이스화 시켜서 여러 구현체로 필요시 사용함!!

SLF4J 라이브러리(인터페이스) → Logback(구현체), 등등…

실무에서는 스프링 부트가 기본으로 제공하는 Logback을 많이 씀.

아래 코드를 보자 대박이다! slf4j의 Logger import해서 final로 생성하고. 저렇게 5가지 단계에 로그를 실행 할 수 있다! 굳이 로거 생성안해도 롬복의 @slf4j 애노테이션 붙히면 log.debug 가능하다네~.

package hello.springmvc.basic;

import org.slf4j.Logger; // 꼭 slf4j 꺼 import 하기!
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogTestController {

    private final Logger logger = LoggerFactory.getLogger(this.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";
    }
}

시간도 나오고~ 색깔 차이도 있고 어떤 프로젝트, proccess 이름, 컨트롤러에서 실행됐는지 다 나온다~ 어? 근데 그럼 trace, debug는 어디갔지??

image.png

application.properties에 어떤 로그까지 뜰지 정할 수 잇다!! 디폴트는 INFO까지!! 보통 개발단계에선 trace,debug로 바꾸고 운영서버에선 info로 해놓는다고 한다!! 대박!!

**#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=info**

하긴 그치 System.out.print()로 찍으면 모든 로그가 다 찍혀서 로그 폭탄 맞겠지~

그리고 괜히 {} 이렇게 쓰는 이유가 있다!! debug, trace를 log.debug(“data = “ + data)로 설정해놓으면 기본단계에서 출력은 안되겠지만 “data = data” 가 되는 연산은 쓰고 나서 출력이 안되는 거다! (메모리는 쓰고~ 하는 거는 없고~) 실무에서 이러면 혼난다!