[6] 스프링 MVC (7) - 로깅(Slf4j / Logback)

김정욱·2021년 5월 22일
0

[6] 스프링 MVC

목록 보기
7/13
post-thumbnail

로그(log) ?

  • 기록남기는 것
  • 프로그램 개발이나 운영 시 발생하는 문제점추적 하거나 운영 상태모니터링 하는 정보를 기록
  • 기록 데이터분석하여 다양한 통계에 사용할 수 있음
  • 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 출력하지 않고 별도로깅 라이브러리사용
  • 스프링 부트 라이브러리사용하면 스프링 부트 로킹 라이브러리(spring-boot-starter-logging)포함됨

로깅 라이브러리

[ 설명 ]

  • 스프링 부트 로킹 라이브러리(spring-boot-starter-logging)가 사용하는 기본 로깅 라이브러리
    • Slf4j : 다양한 로깅 라이브러리를 통합해서 인터페이스로 제공하는 것
    • Logback : 실제 로깅 라이브러리의 구현체 역할
      (실제 실무에서도 기본적으로 적용하는 Slf4j + Logback 조합을 대부분 사용)

[ 특징 ]

( Log Level )

  • Log Level
    • ERROR : 요청을 처리하는 중 오류가 발생한 경우
    • WARN : 처리 가능한 문제지만, 향후 시스템 에러의 원인이 될 수 있는 경우
    • INFO : 로그인이나 상태 변경과 같은 정보성 메시지
    • DEBUG : 개발 시 디버깅 목적으로 출력
    • TRACE : DEBUG 레벨보다 좀 더 상세한 메시지
  • 로그의 출력 레벨5가지로 존재
  • 개발 단계에서는 주로 DEBUG (혹은 그 위 level)
  • 운영 단계에서는 주로 INFO (혹은 그 위 level)
  • ex) INFO 지정 --> INFO / WARN / ERROR 모두 출력
  • ex) DEBUG 지정 --> DEBUG / INFO / WARN / ERROR 모두 출력
  • Log Level 설정application.properties에서 가능
    (기본 전체 log levelinfo로 설정되어 있음)
# 전체 로그 레벨 설정 (default = info)
logging.level.root=info

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

( 올바른 사용법 )

  • +을 통해 문자열을 조합해서 출력하는 것은 +연산이 먼저 수행된 후에 출력여부를 결정
    --> 결국 출력하지 않아도 연산을 수행하기 때문에 비용이 든다
    --> +연산을 통한 출력 대신 {}라는 치환문자를 통해서 출력해야 한다
# 올바르지 못한 방법
log.info("info log = " + info);

# 올바른 방법
log.info("info log = {}", info);

[ 사용 ]

( Logger 가져오기 )

  • 직접 가져오기
    : private final Logger log = LoggerFactory.getLogger(getClass());
  • @Slf4j 사용
    : 롬복의 @Slf4j를 사용하면 바로 log라는 이름으로 logger를 사용할 수 있음

( log 찍기 )

//@Slf4j
@RestController
public class LogTestController {
  // @Slf4j로 대체 가능
  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);

    //로그를 사용하지 않아도 a+b 계산 로직이 먼저 실행됨, 이런 방식으로 사용하면 X
    log.debug("String concat log=" + name);
    return "ok";
  }
}

[ 장점 ]

  • 쓰레드 정보 / 클래스 이름 같은 부가 정보를 함께 볼 수 있으며, 출력 모양 조정 가능
  • 로그 레벨에 따라 상황에 맞추어 로그 출력 가능
    • 개발 서버 --> 모든 로그 출력
    • 운영 서버 --> 로그 출력 X
  • 콘솔 뿐만 아니라 파일 / 네트워크로그를 별도의 위치에 남길 수 있다.
    --> 특히 파일로 남길 때에는 일별 / 특정 용량에 따라 로그를 분할할 수도 있음
  • 성능일반 System.out보다 좋다
    --> 내부 버퍼링 / 멀티 쓰레드 등등
profile
Developer & PhotoGrapher

0개의 댓글