Backend/Spring

[Spring MVC] 로깅(Logging)

지미닝 2024. 4. 1. 00:57

자바에서는 로깅을 slf4j를 사용한다.

Logger를 쓰는 이유

로깅을 쓰는 이유는 간단하다. 당장 아래 예시의 결과만 봐도 Logger를 활용한다면 알 수 있는 것이 훨씬 많다.

@RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";

        System.out.println("name = " + name);
        log.info("info log={}", name);

        return "ok";
    }

Logger를 사용하면 어디서 로깅한 것인지도 알 수 있다!

 

또한 application.properties를 통해서 Debug 레벨을 선택할 수 있다. 이것이 로깅의 또다른 장점이기도 하다!

trace, debug, info(로컬에서는 trace, 개발에서는 debug, 운영에서는 info를 주로 사용한다!)가 있는데 목적에 따라서 사용한다. 만약 운영시스템에서 잘못해서 모든 로그를 찍게 된다면 로그가 더러워지고 폭발하게 된다. 따라서 배포할 때는 설정을 바꿔서 배포하도록 한다. 

logging.level.hello.springmvc=trace
@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";
    }

 

Controller의 반환값이 String이면 뷰 이름으로 인식되는데, @RestController는 반환 값으로 뷰를 찾는 것이 아니라 HTTP 메시지 바디에 바로 입력한다!

 

나중에는 로그를 파일로 남길 수 있고 네트워크 등 별도의 위치에 남길 수 있다! 그리고 성능도 내부 버퍼링, 멀티 쓰레드 등등에서 일반 println보다 좋다. 따라서 실무에서는 반드시 로그를 사용하여야 한다.

 

더 알아볼 부분

- slf4j, logback에 대해서 더 공부해보자!

- https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-logging