LOGGING

0

SpringBoot

목록 보기
3/12
post-thumbnail

Logging

  • 어플리케이션 개발 중 또는 완료 후 발생할 수 있는 오류를 디버깅하거나, 상태를 모니터링하기 위해 필요한 정보를 기록하는 것
  • 그동안 System.out.println()을 이용했는데, 이는 좋은 방법이 아니다.
    • sout을 이용하면 개발중에 필요한 로그를 구별하기 위해서는 특정 로직에서 컴파일을 하고 다른 부분에서 로그를 찍고싶으면 원하는 sout을 다시 코멘트 해제(재컴파일)하고 계속 반복되기 때문에 소스코드가 재컴파일 하는게 너무 잦아짐.
      -> logging 처리에 적합하지 않다.

자바 주요 로깅 프레임워크

  • log4j : 아파치가 만들었는데 굉장히 큰 보안상 취약점이 생김 -> 안씀
  • logback : log4j의 후속버전. 스프링부트에 내장!되어있음.
  • tinylog : 최소형 로그처리. 소형 어플리케이션(작아야하는, 모바일 디바이스) 또는 스마트 카드에서 사용
  • SLF4J : SimpleLoggingFacade4(for)Java
    • 자바 주요 로깅 프레임워크들의 표준안.
      facade 패턴 -> 쓰기 편하게(단순하게) 바꿔주는 것

SLF4J

TRACE < DEBUG < INFO < WARN < ERROR

  • TRACE: 아주 상세한 정보를 나타낸다.
    • 지저분해질 수 있어서 잘 안씀
  • DEBUG : 디버깅하기 위해 표시한다.
  • INFO : 가장 많이 쓰이는 레벨. 상태의 변경정보를 표시한다.
  • WARN : 경고성 메시지를 표시한다.
  • ERROR : 오류가 발생한 경우 표시한다.

SLF4J와 log4j, logback의 관계, Binding Library

1. SLF4J - LOG4J

  • 만약 SLF4J API를 사용하고, 실제로 사용되는 로깅프레임워크는 log4j를 사용한다고 가정하면
    이때, 사용법을 log4j에 맞추는 것이 아니라, slf4j에 맞춰 사용하더라도 중간 매개체 역할을 해주는 라이브러리가 알아서 자동으로 log4j의 기능을 호출한다.

2. SLF4J - LOGBACK

  • 우리가 사용하는 것은 표준안slf4j 이지만 실제로 사용되는 라이브러리는 스프링 부트내장돼있는 logback이다.

3. Binding Library

이때, 실제 사용되고 있는 프레임워크(slf4j)와 logback을 연결해주는 라이브러리가 더 필요하다 -> binding용 라이브러리. -> binding용 라이브러리의 이름이 logback-classic-{버전}.jar

4. Bridge Library

  • 브릿지용 라이브러리도 필요한데 이는 log4j에서 사용했던 문법을 logback에 갖다 쓰고 싶지만 다른프레임워크이기 때문에 갖다 쓸 수없음 -> 중간 브릿지역할을 해주는 라이브러리가 해줄 수 있는데,
  • slf4j에서 사용하는 바인딩용 라이브러리(스프링부트에 내장), 이기종간의 브릿지역할을 해주는 브릿지용 라이브러리 2개가 필요함(jul-to-slf4j 인것같음)

log 코드 설정방법

  • private static Logger logger = LoggerFactory.getLogger(DemoApplication.class); // 로그 대상이 될 클래스 지정
  • debug는 콘솔에 출력 안됨.
    스프링 부트는 기본 로그 레벨이 info이기 때문 -> 더 밑에단계는 출력안됨(trace, debug)
  • application.properties에 로그 레벨을 설정해주면 됨
  • 소스 코드에서 코멘트나 재컴파일 하는 것이 아니라, 설정파일 또는 properties 파일에 등록하면 됨.
  • logging.level.root = debug
  • 디버그1 뿐만 아니라 다른 DEBUG 레벨 애들도 다 뜸. 너무많아!
  • root는 info가 기본.
  • 패키지단위로도 설정 가능하다.
    • logging.level.원하는 패키지명 = 로그레벨
profile
백엔드를 공부하고 있습니다.

0개의 댓글