FreeHand

로깅 본문

Web/Spring

로깅

Jinn 2023. 10. 28. 21:07

 

로그 라이브러리는 Logback, Log4J, Log4J2 등이 있는데, SLF4J는 이것들을 통합해서 인터페이스로 제공한다.

SLF4J 인터페이스의 구현체로 Logback 같은 라이브러리를 사용한다.

 

@RestController
public class LogTestController {

    // 로그 선언
    private final Logger log = LoggerFactory.getLogger(getClass());
//    private static final Logger log = LoggerFactory.getLogger(Xxx.class)
    
    @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";
    }
}
// application.propertise에서 로그 레벨 설정
logging.level.hello.springMVC=trace

로그를 선언하고 호출하는 코드이다.

로그 선언은 private static final Logger log = LoggerFactory.getLogger(Xxx.class) 코드를 통해서도 가능하다.

또한 클래스에 @Slf4j 애노테이션을 사용해서도 가능하다.

@Slf4j // 로그 선언
@RestController
public class LogTestController {
    
    @RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";
        
        log.info("info log={}", name);
        return "ok";
    }
}

 

기본 설정은 info부터 출력되지만 application.propertise에서 위 코드를 추가해서 출력되는 레벨을 설정할 수 있다.

로그 레벨: TRACE -> DEBUG -> INFO -> WARN -> ERROR

보통 개발 서버에서는 DEBUG, 운영 서버에서는 INFO 단계로 한다.

trace로 설정했기 때문에 5개의 로그가 모두 출력되었다.

 

 

log.info("info log=" + name);  // 1
log.info("info log={}", name); // 2

로그 출력은 1번 방식처럼 단순 문자열 연산으로 출력할 수도 있다.

하지만 이렇게 하면 로그를 사용하지 않더라도 연산이 먼저 실행되어서 리소스가 낭비된다.

따라서 로그 출력은 2번 방식으로 한다.

 

로그 사용 장점

  • 쓰레드 정보, 클래스 이름 등 부가 정보를 함께 볼 수 있다.
  • 출력 형태를 조정할 수 있다.
  • 로그 레벨을 상황에 맞게 조절할 수 있다.
  • 콘솔뿐만 아니라 파일이나 네트워크 등에도 로그를 남길 수 있다.
  • System.out보다 성능이 좋다.

이런 장점들 때문에 System.out대신 로그를 사용한다.

 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 (inflearn.com)