[심화] 로깅은 무엇일까 ??

목차
728x90

 

로깅

로깅의 장점

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

- 로그 레벨을 설정하여 상황에 맞게 조절해 사용할 수 있다.

- 콘솔에만 출력하는 것이 아닌, 파일/네트워크 등 별도의 위치에 남길 수 있다.

(파일에 남기는 경우, 일별 / 특정 용량에 따라 로그를 분할하는 것도 가능)

- 성능도 System.out 보다 좋다. (내부 버퍼링, 멀티 스레드 등)

 

SLF4J : 로그 라이브러리들을 통합한 인터페이스

LogBack : SLF4J 를 구현한 구현체 중 한 로그 라이브러리

 

로그 선언

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

> @Slf4j 를 클래스에 추가하면, 로그 선언 없이 바로 log 를 사용할 수 있다.

 

로그 호출

log.info("hello");

 

로그 사용

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

 

로그 출력 포멧

시간 | 로그 레벨 | 프로세스 ID | 스레드 명 | 클래스명 | 로그 메시지

 

로그 레벨

- TRACE > DEBUG > INFO > WARN > ERROR

- debug : 개발 서버, info : 운영 서버

 

로그 레벨 설정

- 기본값은 info

logging.level.hello.springmvc=debug

 

올바른 사용법

 만약 로그 출력 레벨이 info 인 경우,

log.debug("data={}", data) 는 아무 일도 발생하지 않지만,

log.debug("data=" + data) 는 컴파일 시점에 문자열 연산이 발생하여 의미 없는 연산이 발생한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 | 스프링 MVC 1(김영한) - 인프런

728x90