development/spring

[Log] Logback 기반의 Slf4j 로그 추상화 설정

bokshiri 2024. 9. 16. 19:22

Reflection과 Spring Aop를 활용한 공통 로그 처리를 정리하려다 보니 새로 만든 프로젝트에 로그 추상화 설정이 되어 있지 않은 것을 알게 되었다. 선행 작업으로 Logback 기반의 로그 처리 기능을 추가할 것이다.

설정에 앞서 기본 개념을 조금 정리하자면,

JPA가 자바 표준 ORM Interface이고, Hibernate는 구현체이듯

로그 처리에 있어 Slf4j는 표준 인터페이스 명세이고, Logback은 다양한 구현체 중 하나라고 이해하면 된다.


스프링부트에서 Logback 설정을 하려고 찾아보니 부트 Starter Dependency에 이미 logback 및 Slf4j 와 관련된 라이브러리가 추가되어 있었다.

Maven Repository에서 

  • Logback Classic Module
  • Logback Core Module

위 두 가지 Dependency의 버전 및 컴파일 의존성을 체크하고 있었는데.. 추가할 필요가 없다. 스프링 부트 프로젝트를 생성하면 Slf4j, Logback Dependency가 자동으로 추가된다. 라이브러리에 대한 추가는 부트에서 알아서 해주니 신경쓸 필요 없고, 로그의 포맷과 레벨 설정 정도만 잡아 주도록 하자.

 

먼저 application.yaml의 설정을 잡아준다.

logging:
  config: classpath:log-config.xml
  level:
    root: info
    com.example.demo.aop: debug # 특정 패키지별로 설정 가능

log configuration xml 파일 경로를 입력해주고, 루트와 각 패키지별 로그 레벨을 설정해준다.

 

다음으로 로그의 포맷, 색상, 레벨 등을 종합적으로 설정할 수 있는 xml 파일을 구성한다.

아래의 구성은 프레임워크의 로그 레벨을 DEBUG로 설정하고 기본 DEMO 설정은 INFO 레벨로 지정하였다. Spring-Web Log는 [Spring]으로, 콘솔을 비롯한 DEMO 프로젝트의 로그는 [DEMO]로 기록될 것이다.

<configuration>
    <!-- 로그 패턴에 색상 적용 %clr(pattern){color} -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

    <property name="DEMO"
              value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative]  %clr(%-5level) %clr([DEMO]) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15thread]){faint} %clr(%-40.40logger{36}){cyan} %clr(:){faint} %msg%n"/>

    <property name="SPRING"
              value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative]  %clr(%-5level) %clr([SPRING]) %clr(${PID:-}){magenta} %clr(---){faint} %clr([%15.15thread]){faint} %clr(%-40.40logger{36}){cyan} %clr(:){faint} %msg%n"/>

    <!-- 콘솔(STDOUT)에 log 기록 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>${DEMO}</Pattern>
        </layout>
    </appender>

    <appender name="INLINE_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>${SPRING}</Pattern>
        </layout>
    </appender>

    <!-- log root 레벨 설정 (logging.level.root=info)-->
    <Root level="INFO">
        <!--     참조할 appender 설정 - STDOUT -->
        <appender-ref ref="STDOUT" />
    </Root>

    <logger name="org.springframework.web" level="DEBUG" additivity="false">
        <appender-ref ref="INLINE_STDOUT" />
    </logger>

</configuration>

 

프로젝트 실행 로그 출력

 

로그 설정에 대한 추가적인 내용 및 상세한 설정은 아래 블로그에 아주 자세하게 나와있다. 로그 설정에 관해 궁금한 점이 생기면 꼭 방문해서 확인해보자..

https://loosie.tistory.com/829

 

[Spring] 스프링 부트에서 로그(Log) 사용하기 - Logback (Sync, AsyncAppender)

스프링 부트에서 Logback 사용하기 스프링 부트에선 기본적으로 Logback이 설정되어 있다. 다음과 같이 spring-boot-starter-logging 라이브러리에 기본적으로 설치되어 있어서 SLF4J의 3가지 모듈이 Logback과

loosie.tistory.com