본문 바로가기
Spring/Spring-detail

log(로그,로깅)

by YoonJong 2022. 6. 8.
728x90

로그에 대해 알아보자.

로그 사용시 장점

쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.

로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.

시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다.

특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.

성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야한다.


사용법

Logger 를 사용해서 log 를 만들어 사용할 수 있다.

주의 할점은 Http body에 직접 출력해주어야 하기 때문에 @RestController 를 사용해야 한다

// @Controller를 사용하게 되면 Http body에 출력되는 것이 뷰이름으로 넘어가게 된다.
// @RestController 사용해서 Http body 메세지에 출력되도록 한다.
@RestController
public class LogTestController {
    // 기본으로 제공되는 Logger를 사용한다.
    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); // 개발중에서는 debug를 주로 사용
        // 운영중에서는 info 를 주로 사용 , 아무설정하지 않으면 디폴트값으로 info로 지정되어있다.
        log.info("info log = {}" , name); 
        log.warn("warn log = {}" , name);
        log.error("error log = {}" , name);

        return "ok";
    }

}

 

Logger 를 사용하지 않고 lombok 이 제공하는 에너테이션 @Slf4j 를 사용하면 생략할 수 있다.

 


 

application.properties 에 따로 설정해줄 수 있다.

아래 코드처럼 전체 로그 레벨은 기본적으로 info 로 설정되어있다.

모든 설정을 dubug 설정으로 바꾸게 되면 스프링이 제공하는 모든 파일이 dubug 로 출력되기 때문에

너무 많은 정보가 콘솔 창에 출력된다.

 

내가 필요한 패키지에만 설정해 줄 수 있는 방법이 있으니, 이 방법을 이용하면 된다.

#전체 로그 레벨 설정 ( 기본 info )
#logging.level.root=info

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

LEVEL: TRACE > DEBUG > INFO > WARN > ERROR

로그의 레벨은 위와 같다.

아래와 같이 모든 레벨의 로그를 찍는 메서드를 작성해도,

application.properties 에 로그 레벨을 debug 로 설정하면trace 는 출력되지 않는다.

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);

로그의 출력방법은 위와 같이 메서드를 이용해야 한다.

아래와 같이 연산을 이용하게 되면 설정은 debug로 되어있을때, 출력은 되지 않지만,

연산을 사용하게 되어서, 메모리를 차지하고 있는다.

메서드로 사용하게 되면 자신이 출력되지 않는 조건에서는 아무런 행동을 하지 않기 때문에 메서드를 사용해야 한다.

 

 

참고 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

728x90

'Spring > Spring-detail' 카테고리의 다른 글

assertThrows 예외 테스트  (0) 2022.08.21
assertThatThrownBy 테스트  (0) 2022.08.17
테스트 케이스 설정 방법 - Memory DB 사용하기  (0) 2022.08.17
@Profile 활용하기  (0) 2022.07.21
@JsonIgnore 와 @JsonIgnoreProperties  (0) 2022.07.08

댓글