로깅

  • 컴퓨팅에서 로그파일(logfile)은 운영 체제나 다른 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메시지를 기록한 파일이다. 로그를 기록하는 행위는 로깅(logging)이라고 한다.
  • 위키 피디아 참고
  • 사용시 장점
    • 쓰레드 정보, 클래스 이름과 같은 부가 정보를 함께 볼 수 있음
    • 출력 모양 조정 가능
    • 로그 레벨에 따라, 개발 서버와 운영 서버를 별도로 관리 가능
    • 파일, 네트워크 등 로그를 별도의 위치에 남길 수 있음
      • 파일로 남길 시, 일별, 특정 용량에 따라 로그 분할 가능
    • 성능도 System.out보다 더 좋음

로깅 라이브러리

  • 스프링 부트 라이브러리를 사용하면 기본적으로 다음 로깅 라이브러리를 제공
    • SLF4J (인터페이스)
    • Logback (구현체)
  • 대부분 Logback 사용
@Slf4j
@RestController
public class LogTestController {
    // lombok이 대신 해줌                                            // LogTestController.class
    // 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";
    }
}
  • lombok의 @Slf4j Annotation으로 LoggerFactory한방에 해결 가능

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

  • application.properties에서 로그 레벨 설정 가능

    • # 전체 로그 레벨 설정 (default: info)
      # logging.level.root=info
          
      #hello.springmvc 패키지와 그 하위 로그 레벨 설정
      logging.level.hello.springmvc=trace
      
    • 개발 서버 = DEBUG, 운영 서버 = INFO로 설정하고 많이 사용
  • 중요!!! 로그를 출력할 때 + 연산을 사용하면 안 됨

    • log.trace("trace log = {}", name);         // O
      log.trace("trace log = " + name);        // X
      
    • 만약 로그 레벨이 info라면, 위의 로그는 찍히지 않는다.

    • 하지만 + 연산을 사용하는 경우, 로그가 찍히지 않는 건 변함이 없는데 연산 자체는 동작한다.

    • 즉, 의미도 없는 연산이 발생하므로 좋지 않다.



인프런 - 김영한님의 Spring MVC 강의를 정리한 내용입니다.


김영한님 인프런 강의

댓글남기기