ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Logback 구현 - 1
    [공부] 프로그래밍/Spring・Spring Boot (JAVA) 2024. 5. 22. 16:51

     
    ♧ 전체 코드 : https://github.com/woodisco/spring-logback

    GitHub - woodisco/spring-logback: Spring Logback 공부

    Spring Logback 공부. Contribute to woodisco/spring-logback development by creating an account on GitHub.

    github.com

     

    Logback 개념
    : local 환경

    SLF4J 라는 인터페이스를 구현하는 구현체이다. 즉 Logging Framework 이다.
    ◇ Appender의 종류

    • ConsoleAppender : 콘솔에 log를 출력
    • FileAppender : 파일 단위로 log를 저장
    • RollingFileAppender : 설정 옵션에 따라 log를 여러 파일로 나누어 저장
    • SMTPAppender : log를 메일로 전송하여 기록
    • DBAppender : log를 DB에 저장

    Logback 구현

    ① logback-spring.xml 작성
    : spring에서 사용할 logback을 설정하기 위해 파일을 작성 후, 서버를 작동시키면 아래와 같이 아무것도 뜨지 않게 된다.

    그렇게 때문에 아래의 코드를 추가하고

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    프로파일에 따라 logback 설정을 따로 처리하기 위해 아래의 코드도 추가해준다.

    <include resource="logback-spring-${spring.profiles.active}.xml"/>

    ② logback-spring-local.xml 작성
    : logback-spring.xml 에 include 되기 때문에 해당 파일에는 included라고 표기해야 한다. 그리고 ConsoleAppender를 include 한다.

    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    + 기본적인 로그레벨 설정을 추가해야 한다.

    <root level="DEBUG">
        <appender-ref ref="CONSOLE" />
    </root>

    + appender도 추가해야 한다.

    <appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
          <level>INFO</level>
        </filter>
        <layout>
          <pattern>
            [CONSOLE2] [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
          </pattern>
        </layout>
    </appender>

    + root태그에 추가한 appender을 설정하기.

    <appender-ref ref="CONSOLE2" />

    root를 DEBUG로 설정을 하여도 appender마다 다른 레벨로 설정을 할 수있다.
    깔끔한 출력을 위해 root태그의 CONSOLE을 주석처리 한 후에 서버를 가동해 설정한 패턴대로 로그가 출력되는지 확인하기.

    ※ local 환경이므로 Active profiles을 설정하기
    참조 : https://woodisco.tistory.com/188

    ③ DemoController 작성

    package dev.be.springlogback.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    @RestController
    public class DemoController {
    
        @GetMapping("/demo")
        public String demo() {
    
            log.trace("log --> TRACE");
            log.debug("log --> DEBUG");
            log.info("log --> INFO");
            log.warn("log --> WARN");
            log.error("log --> ERROR");
            
            return "Hello";
        }
    }

    해당 controller를 작성하여 설정한 로그가 제대로 출력되는지 확인하기.

    로그 레벨은 debug -> info -> warn -> error 순으로 CONSOLE2 appender의 로그 레벨이 INFO이므로 아래와 같이 출력된다. 

    Logback 개념
    : production 환경

    ① logback-spring-prod 작성
    : 운영환경의 경우에는 ConsoleAppender가 필요 없기 때문에 RollingFileAppender로 설정을 해준다.

    <included>
        <!-- logback-variables.properties에 정의되어 있는 Key를 사용하기 위한 코드 -->
        <property resource="logback-variables.properties" />
        
        <appender name="REQUEST1" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_DIR}/request1.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${LOG_DIR}/archive/request1.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
                <!-- <maxFileSize>10MB</maxFileSize> -->
                <maxFileSize>1KB</maxFileSize> <!-- 로그파일의 최대 크기 -->
                <maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기(단위 : 일) / 보관주기가 넘어가면 파일은 자동으로 삭제 -->
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>[REQUEST1] ${LOG_PATTERN}</pattern>
                <!--
                ## outputPatternAsHeader
                - File 헤더에 pattern을 출력한다.
                - ref : https://logback.qos.ch/manual/encoders.html#outputPatternAsHeader
                ex) #logback.classic pattern: [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
                -->
                <outputPatternAsHeader>true</outputPatternAsHeader>
            </encoder>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="REQUEST1" />
        </root>
    </included>

    서버를 가동시켜 curl localhost:8080/demo 를 터미널로 날리게 되면 아래와 같이 log파일이 생성된것을 볼 수 있다.

    + 두번째 appender를 추가해보기

    <appender name="REQUEST2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/request2.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
          <fileNamePattern>${LOG_DIR}/archive/request2.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
          <maxFileSize>1KB</maxFileSize>
          <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
          <pattern>[REQUEST2] ${LOG_PATTERN}</pattern>
          <outputPatternAsHeader>true</outputPatternAsHeader>
        </encoder>
    </appender>
    
    // root 태그에 추가
    <appender-ref ref="REQUEST2" />

     

    출처 : 패스트캠퍼스 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online

    '[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글

    Batch 정리  (0) 2025.04.12
    Logback 구현 - 2  (0) 2024.05.23
    Feign Client 구현 - 4  (0) 2024.05.22
    Feign Client 구현 - 3  (0) 2024.05.22
    Feign Client 구현 - 2  (0) 2024.05.21
Designed by Tistory.