본문 바로가기
학습/Spring

[spring] 스프링부트의 로깅

by KKambi 2020. 4. 16.

로깅 퍼사드(Logging Facade) & 로거(Logger)

Logging Facade

  • Logger API들을 추상화해놓은 인터페이스
  • 로깅 퍼사드를 통해 로거 사용
  • 장점 : 구현체를 쉽게 바꿀 수 있다 (Spring Data JPA처럼)
  • 종류 : SLF4j / JCL / Commons Logging

Logger

  • 종류: log4j2 / JUL(java.util.logging) / LogBack

스프링부트의 로깅

  • 과거 : Commons Logging
  • 현재 : Spring-JCL의 개입으로 Commons Logging(인터페이스) -> SLF4j(인터페이스) -> Logback(구현체)
  • 중요 : 최종적으로 Logback을 사용함을 기억
  • SLF4j는 의존성에 의거하여 로거를 선택한다. 어떤 구현체로도 바꿀 수 있다.

로깅 관련 의존성

  1. jul-to-slf4j : jul을 사용하는 코드 -> slf4j로 보냄
  2. log4j-to-slf4j : log4j를 사용하는 코드 -> slf4j로 보냄 log4j / log4j2를 slf4j로 보내는 slf4j bridge
  3. 결국 slf4j가 받아서, Logback으로 로그를 남기게 됨.

로그로 남는 것

  • 날짜
  • 시간
  • 로그레벨
  • pid
  • 스레드이름
  • 패키지경로
  • 메세지

로그 레벨 조정

  1. program arguemnts로 --debug

  2. logging.level.패키지=로그레벨

    logging.level.org.kkambi=DEBUG
    logging.level.org.kkabmi=TRACE

로그로 남는 것

  • 날짜
  • 시간
  • 로그레벨
  • pid
  • 스레드이름
  • 패키지경로
  • 메세지

디버그 모드

  • 디버그 모드라고 모든 메세지를 디버그 레벨로 로깅하지 않음
  • 일부의 핵심 라이브러리 = 코어 로거 (임베디드 컨테이너, 하이버네이트, 스프링부트)만 해당
  • 모든 메세지를 찍고 싶다면 --trace

콘솔창 컬러 로깅

spring.output.ansi.enabled=always


로깅 파일 출력

  • logging.file OR logging,path
  • 기본적으로 10메가마다 rotate
    logging.path=logs

커스텀 로그 설정 파일 사용

  • full log control을 원할 때
  • Logback: logback-spring.xml (추천)
    1. Logback Extension과 같은 추가기능 사용가능
    2. 로그백 설정 파일 안에서 프로파일이나 Env 사용가능
      • 특정 프로파일일 때만 로그가 찍히도록 설정
      • Environment에 등록된 프로퍼티 값을 사용가능
    3. 로깅 패턴 등을 통해 성능에 영향끼칠 수 있는 로그 걸러내기!

로거를 Log4j2로 변경하기

  • 내장 WAS 변경할 때랑 동일
  • Logback 의존성이 담긴 org.springframework.boot:spring-boot-starter-logging를 exclude
  • log4j2 의존성을 추가
    dependencies {
      compile ("org.springframework.boot:spring-boot-starter-web"){
          exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
      }
      compile "org.springframework.boot:spring-boot-starter-log4j2"
    }

댓글