MVC 기본1 - 로깅

JIWOO YUN·2023년 11월 28일
0

MVC기본 1

목록 보기
5/5
post-custom-banner

로깅 알아보기

  • 시스템 콘솔을 사용해서 필요한 정보를 출력하는게 아닌 별도의 로깅 라이브러리를 사용해서 로그를 출력하자.
  • 시스템 콘솔을 통해서 필요한 정보를 출력하는 경우 -> 기록을 남기기도 어려움.

로깅 라이브러리

  • slf4j
  • Logback

로그 선언

  • log.info("hello")

System.out.println()를 쓰는 경우 어떤 단계든지 다 남김. -> 다수의 사람이 들어와서 처리를 할 경우 엄청나게 많은 로그가 남게됨.

@RestController
public class LogTestController {


    private final Logger log = LoggerFactory.getLogger(getClass());

    @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";
    }
}
  • Logger부분은 @Slf4j 어노테이션을 통해서 Lombok이 자동으로 넣어주는게 가능

  • Slf4j 어노테이션을 따라들아가게되면 예시가 있는데 거기에서 자동으로 생성된다는 것을 알려준다.

  • Example:
      @Slf4j
      public class LogExample {
      }
      
    will generate:
      public class LogExample {
          private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
      }

@Slf4j를 사용한 모습

@Slf4j
@RestController
public class LogTestController {

    @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";
    }
}

@RestController

  • @Controller는 반환값이 String이면 뷰 이름으로 인식되기 때문에 view를 찾고 랜더링됨.
  • @RestController 반환 값으로 뷰를 찾지 않고 ,HTTP message body에 바로 입력된다. -> 실행 결과로 ok 메세지를 받을 수 있게 됨

로그가 출력 되는 포멧

  • 시간, 로그 레빌, 프로세스 id , 쓰레드 명, 클래스 명, 로그 메시지
  • 로그 레벨
    • TRACE -> DEBUG -> INFO -> WARN -> ERROR 순
    • 로그레벨을 trace로 설정해놓으면 trace부터 error까지 모두 로그가 남음.
    • 개발서버는 debug 까지 출력
    • 운영 서버는 info 까지 출력

로그 레벨 설정

  • 전체 로그 레벨 설정 (yml 파일 기준)
# root -> 전체 로그 레벨 설정
# hello.springmvc => hello 패키지와 그 하위 로그 레벨 설정
logging:
  level:
    root: info
    hello.springmvc : debug

올바른 로그 사용법

 log.info("info log ="+ name);
 log.info("info log={}", name);
  • 두 방법 둘다 사용이 가능하다.
  • java는 +메서드가 있으면 더하기 연산이 일어난다. -> 메모리 사용및 CPU 가 사용된다.
  • 만약 trace 부분을 첫번째 방법으로 쓸 경우 -> 메모리 사용 및 cpu 사용이 되지만 log가 나오지 않아 그냥 메모리만 사용되는 문제
  • 두번째 부분은 파라미터만 넘기기 때문에 메모리와 cpu가 사용되지 않기 때문에 후자의 방식이 더 좋은 방법

장점

  • 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있음 -> 출력 모양을 조정할 수 있음.
  • 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그 를 상황에 맞게 조절할 수있음.
  • 파일이나 네트워크 등, 로그를 별도의 위체에 남길 수 있음.
  • 성능도 System.out 보다 좋음.
profile
열심히하자
post-custom-banner

0개의 댓글