스프링/백엔드

로깅 간단히 알아보기

지팡구 2022. 5. 18. 02:33

서비스를 개발하고 테스트를 할 때, 그 로직이 잘 동작하는지를 확인하는 방법은 다양하다. 그 중에서 나는 보통 출력문 하나를 넣어서 잘 출력이 되는지를 확인하고는 했는데, 이러한 방식은 실무에서 사용하지 않고 사용을 권장하지 않는다.

 

그래서 출력문이 아닌 별도의 로깅 라이브러리를 사용해 로그를 출력하는데, 이 로깅 라이브러리의 종류가 매우 많다. 그래서 몇 개의 예시를 통해 정리해보고자 한다.

 

@RestController
public class LogTestController {

	// 이 코드는 로그를 선언하는 방법이다.
    private final Logger log = LoggerFactory.getLogger(getClass());

	// 5번라인의 로그 선언 방법 외에도 아래 2개의 방법이 있다.
    private static final Logger log = LoggerFactory.getLogger(Xxx.class)
    @Slf4j
    
    지금 코드를 보면 로그를 확인하기 위해 5번라인과 8번라인 처럼 선언을 해줘야 로그를 볼 수 있는데,
    그러지말고 롬복에서 제공하는 @Slf4j 어노테이션을 사용하면 선언한 것과 같이 log() 메소드를 이용할 수 있다.
    
    

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

        System.out.println("name = "+name);
        log.info("info log={}", name);
        return "ok";
        // RestController 이용 시 return 값을 그냥 콱하고 박아버림
    }
}

 

이러한 코드가 있다고 가정해보자.  직접 코드를 작성해서 출력해보면 콘솔창에 이렇게 출력이 될 것이다.

눈으로 봐도 명확한 차이가 존재한다. 로그를 통해 출력을 하게 되면 출력문과 다르게 더욱 다양한 정보가 출력이 된다.

 

학습 내용을 정리하면 다음과 같다.

 

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

로그에도 레벨이 있다. trace ~ error까지 있는데, 가장 높은 레벨은 trace이며, 위에 있는 코드에 이 코드를 추가해서 출력해보면 info, warn, error 만 출력이 된다. info부터 출력이 되는 이유는 기본 설정값이 info이기 때문이다. 특정 패키지 말고 전체 패키지의 기본 설정값을 바꿀 수 있는데, 이 기본 설정값을 바꾸게 되면, 엄청나게 많은 로그가 찍힐 수 있다.

 

이 말은 결국 지금 스프링에서 실행중인 모든 파일마다 로그 level이 설정 되어있음을 의미하고 있다.

 

(서버마다 다르게 로그 레벨을 설정해서 확인할 수 있다. 실제로도 그렇게 많이 사용한다고 한다.)

 

하지만 내가 로그를 다 보고싶다면? application.properties의 파일에서 log를 설정해주면 되는데, 설정법은 다음과 같다.

logging.level.패키지 위치= 단계 설정 (trace ~ error)

 

로그를 사용할 때 주의점이 있다

 log.info(" info log={}", name);
 log.info(" info log="+name)
 
 과연 이 두개의 로그는 어떻게 출력이 될까?

결과는 똑같이 출력이 된다. 하지만 아래의 방식인 +name을 사용해서는 안 된다!

왜? 이유는??  바로 연산에 있다. 결국 불필요한 연산 때문에 리소스 낭비가 일어난다.

 

정리를 해보면 로그를 출력할 때 출력문을 통해서 동작을 확인하는 것보다, 로그를 통해서 확인하는 것이 성능이슈 면에서도 좋고, 더욱 다양한 정보를 얻을 수 있다. 또한 설정만으로 상황에 맞게 조절할 수 있다.  또한 설정을 통해 로그를 파일로 남길 수 있다. 

 

해당 공부는 인프런의 김영한님의 스프링 MVC 1편 中 로깅 간단히 알아보기 챕터를 학습한 후 정리한 내용입니다.