로깅 퍼사드 & 로거
- 로깅 퍼사드 : Commons Logging, SLF4j
- 로거 : JUL, Log4J2, Logback
스프링부트는 기본적으로 Commons Logging을 사용한다.
로깅퍼사드란 로거 API들을 추상화 해놓은 인터페이스들을 뜻한다.
로깅퍼사드는 로깅 퍼사드들 밑에 있는 로거를 바꿔 낄 수 있게 해준다. 따라서 주로 프레임워크들은 애플리케이션들이 로거를 원하는 대로 쓸 수 있도록 해주기 위해 로깅 퍼사드들을 기반으로 개발한다.
Commons Logging은 런타임시 클래스 로딩 관련 이슈 등 여러 문제들이 있었다. 그에 따라 Commons Logging을 기피하게 되었고 SLF4j라는 새로운 퍼사드가 만들어졌다.
그럼에도 불구하고 스프링이 Commons Logging을 사용하는 이유는 SLF4j이 나오기 이전에 스프링 코어 모듈이 생성되었기 때문이다.. T.T
Spring ver1에서는 pom.xml 의존성 설정을 통해 스프링 코어에서 exclusion으로 Commons Logging을 빼고 SLF4j를 추가해서 사용했다. 하지만 너무 귀찮다...
따라서 Spring ver5부터는 그렇게 exclusion시키지 않아도 Commons Logging 코드를 자체적으로 컴파일 시점에 SLF4j 등으로 변경할 수 있는 기능을 가진 Spring-JCL이라는 모듈을 만들었다.
Commons Logging → SLF4j → Logback
pom.xml에 따로 Exclusion을 해주지 않아도 Commons Logging을 SLF4j or Log4j2로 변환해준다.
그리고 SLF4j는 최종적으로 SLF4j의 구현체인 Logback으로 보낸다.
최종적으로 우리는 Logback 로거를 사용하게되는 것이다.
Dependency에서 logback을 확인할 수 있다.
spring.output.ansi.enabled=always
logging.path=logs
logging.level.me.dsunni=debug
spring.output.ansi.enabled = always
logging.file
또는logging.path
logging.level.패지키 = 로그 레벨
- Logback (추천): logback-spring.xml
- Log4J2: log4j2-spring.xml
- JUL (비추): logging.properties
파일 내 Logback Extension 사용 가능하다
<springProfile name="Profile">
springProperty
resources
패키지 내
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="me.dsunni" level="DEBUG"/>
</configuration>
적합한 로깅 설정을 변경하면된다
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#ho
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>