본문 바로가기

Spring/Spring Boot

(SpringBoot) Logging

로깅 퍼사드 VS 로거

Commons Logging, SLF4 j(로깅 퍼사드) : 실제 로깅을 하는 것이 나니고 logger  api를 추상화해놓은 인터페이스들이다.

  • 프레임워크들은 로깅 퍼사드를 이용해 코딩한다.

굳이 로깅 퍼사드를 사용하는 이유는?

하위의 logger들을 바꿔 써서 사용할 수 있기 때문이다. (하위 로거 : JUL, Log4 J2, Logback)

예를 들어 프레임워크가 JUL를 사용한다면 JUL만 쓰게 된다.(바꿔 끼울 수가 없다.)

 

현재 Spring Framework는 Commons Logging을 사용하고 있다. (이슈가 많음에도 어쩔 수 없이 사용하고 있다.)

이슈 : memory leak, classloader issue

 

스프링 5에 로거 관련 변경 사항

스프링 1.0 이후에 Commons Logging에 대한  의존성을 exclusion 시키고 SLF4j를 추가시켰다.

위에서 말한 Commons Logging 관련 이슈는 사라졌지만 의존성 설정에 민감해졌다는 또 다른 이슈가 생겼다.

Commons Logging은 런타임 도중에 의존성을 찾는 반면에 SLF4j는 컴파일 타임에 모든 의존성이 다 얽혀서 어떤 로거를 쓸지가 확정되고

애플리케이션이 구동된다. - pom.xml에 여러 가지 의존성 설정이 필요하다.

 

스프링 5.0 이후에는 exclusion 시키지 않아도 JCL(jakarta commons logging)이라는 모듈을 만들어서 컴파일 시점에 Log4 J2 혹은 SLF4j로 변경할 수 있게끔 만들었다.

 

Spring-JCL 

  • Commons Logging -> SLF4 j or Log4 j2 
  • pom.xml에 exclusion 안 해도 됨.

Commons Logging -> SLF4 j -> Logback (최종적으로 Logback으로 간다. -우리의 로그는 Logback으로 찍힌 것이다.)

 

 

jul, log4 j 둘 다 slf4j로 보내고

slf4j는 최종적으로 logback으로 보낸다.

 

 

 


스프링 부트 로깅 

기본 포맷 

  • --debug (일부 핵심 라이브러리만 디버깅 모드로) 
  • --trace (전부 다 디버깅 모드로) 
  • 컬러 출력: spring.output.ansi.enabled 
  • 파일 출력: logging.file.name 또는 logging.file.path
  • 로그 레벨 조정: logging.level. 패키지 = 로그 레벨
@Component
public class SampleListener implements ApplicationRunner {

    private Logger logger = LoggerFactory.getLogger(SampleListener.class);

    @Autowired
    private String hello;

    @Autowired
    private ChoiProperties choiProperties;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        logger.info("------------------------------");
        logger.info(hello);
        logger.info(choiProperties.getName());
        logger.info(choiProperties.getFullName());
        logger.info("------------------------------");
    }
}

실행결과


코드 참조

https://github.com/mike6321/Spring/tree/master/SpringBoot/springinit

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com

 

'Spring > Spring Boot' 카테고리의 다른 글

(SpringBoot) 테스트  (0) 2020.01.05
(SpringBoot) logging(2) - 커스터마이징  (0) 2020.01.05
(SpringBoot) 프로파일  (0) 2020.01.05
(SpringBoot) 외부설정(2)  (0) 2020.01.04
(SpringBoot) 외부설정(1)  (0) 2020.01.04