LogBack은 Sl4FJ 의 구현체로 스프링 부트 기본으로 들어있는 라이브러리이다.
Log4J(Sl4FJ 의 구현체) 를 기반으로 재탄생한 Sl4FJ의 구현체이다.
spring-boot-starter-web 에 spring-boot-starter-logging 로 들어있음
Spring Boot는 기본적으로 CommonsLogging을 쓴다.
jul to slf4j
log4j to slf4j
slf4j → logback
CommonsLogging을 쓰나 결국 Logback으로 출력함 Spring Boot에서는 우리 로깅 진짜 잘 돼있으니까 구현체 바꿀 필요없을 것이다 라고 얘기를한다.
Spring 프레임워크 5.0부터 Spring에는 spring-jcl 모듈에 구현된 CommonsLogging Bridge가 제공됩니다. 이 구현은 클래스 경로에 Log4j 2.x API와 SLF4J 1.7 API가 있는지 확인하고, 발견된 것 중 첫 번째를 로깅 구현으로 사용하며, Log4j 2.x와 SLF4J를 모두 사용할 수 없는 경우 Java 플랫폼의 핵심 로깅 기능(JUL 또는 java.util.logging이라고도 함)으로 되돌아가게 됩니다.
추가 브리지 없이 클래스 경로에 Log4j 2.x 또는 Logback(또는 다른 SLF4J 공급자)을 넣으면 프레임워크가 선택에 따라 자동으로 조정됩니다. 자세한 내용은 Spring Boot 로깅 참조 문서를 참조하세요.
Logback은 Fatal 로그레벨이 없음 Fatal은 Error 레벨과 매핑된다.
기본 설정
2024-01-19T06:35:45.755Z INFO 37160 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path ''
시간 로그레벨 프로세스아이디 —- 어플리케이션 이름 [쓰레드] 로거이름 : 로그메세지
Java
복사
왜 씀?
구조
LogBack은 3가지 모듈로 나뉜다.
LogBack-Core
다른 두 모듈을 위한 기반 역할을 하는 모듈
Appender 와 Layout 인터페이스가 이 모듈에 속한다.
LogBack-classic
LogBack-core에서 확장된 모듈
SlF4J API를 구현했다. Logger 클래스가 이 모듈에 속한다.
logback-classic에 포함된 라이브러리들은 해당 artifact의 올바른 버전 사용이 필요하다.
모두 명시적으로 선언하는 것이 좋기에 exclude 해주는 것이 좋음
logback-access
Servlet Container 와 통합되어 HTTP 액세스에 대한 로깅 기능을 제공
logback-classic 및 slf4j 와 무관하다.
웹 애플리케이션 레벨이 아닌 컨테이너 레벨에서 설치돼야한다.
Level 클래스에서는 Trace < Debug < Info < Warn < Error 가 정의 되어 있다.
Level 속성을 통해서 출력할 로그의 레벨을 조절할 수 있다.
로그레벨을 설정하면 그 이상의 로그들만 출력된다.
ex. Info로 설정 → Info < Warn < Error 만 출력
Default는 Debug로 설정되어 있음
로그 메세지가 출력할 대상을 결정하는 요소
Console 에 출력할 것인지 File에 출력할 것인지.
콘솔에 출력하고 싶어? ConsoleAppender
파일로 출력하고 싶어? FileAppender
파일을 일정 조건에 맞게 따로 저장하고 싶어? RollingFileAppender
Encoder → 로그를 Byte 배열로 저장
해당 바이트 배열을 OutputStream에 쓰는 작업을 담당
Appender에 포함되어 사용자가 지정한 형식의 표현될 로그메시지를 변환하는 역할을 담당하는 역할
FileAppender와 하위 클래스는 Layout을 사용하지 않음(필요하지 않아서)
현재는 Encoder를 사용해도 괜찮을듯
Sl4fj 를 사용했을 때 자동으로 LogLevel Debug 이상만 보여줌
이걸 따로 LogLevel 지정해서 해당 레벨만 보이게 설정하고 싶다 하면
logback.xml을 Resources 아래에 작성