본문 바로가기
BackEnd/Project

[RealPJ] Ch02. Log를 관리하기 위한 Logback 설정(5)

by 개발 Blog 2024. 8. 31.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

이번 포스팅에서는 Logback 설정의 마지막 단계로, 커스텀 로그를 선언하고 이를 다양한 방식으로 사용하는 방법을 알아본다.

 

1. 컨트롤러 생성

먼저 간단한 컨트롤러를 생성하여 로그를 출력한다.

package dev.be.logback.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class QueryController1 {

    @GetMapping("/query1")
    public String query1() {

        log.trace("log --> TRACE");
        log.debug("log --> DEBUG");
        log.info("log --> INFO");
        log.warn("log --> WARN");
        log.error("log --> ERROR");

        return "Query";
    }
}

 

2. Logback 설정 추가

다음으로, logback-spring-prod.xml 파일에 커스텀 로그 설정을 추가한다.

<included>
    <property resource="logback-variables.properties"/> <!-- logback-variables.properties 사용-->

    <appender name="QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/query.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/archive/query.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <maxFileSize>10KB</maxFileSize> <!--로그 파일의 최대 크기 -->
            <maxHistory>30</maxHistory>  <!-- 로그 파일 최대 보관 주기 (단위 : 일) -->
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                [QUERY] ${LOG_PATTERN}
            </pattern>
            <outputPatternAsHeader>true</outputPatternAsHeader>
        </encoder>
    </appender>

    <root level="INFO">
    </root>
    
    <logger name="SQL_LOG1" level="INFO" additivitty="false">
        <appender-ref ref="QUERY"/>
    </logger>
    
</included>
  • 이 설정에서 SQL_LOG1 로거는 QUERY appender를 통해 query.log 파일에 로그를 기록한다.
  • additivity="false" 속성은 SQL_LOG1 로거가 상위 로거의 속성을 상속받지 않도록 설정한다. 이로 인해 상위 로거와 머지되지 않고, 오직 QUERY appender에만 로그가 기록된다.

3. 로그 테스트

이제 curl localhost:8080/query1 명령을 실행하면, 아래와 같이 logs 디렉토리에 query.log 파일이 생성된다.

#logback.classic pattern: [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
[INFO ] 2024-08-31 04:41:58 [http-nio-8080-exec-1] [QueryController1:16] - log --> INFO
[WARN ] 2024-08-31 04:41:58 [http-nio-8080-exec-1] [QueryController1:17] - log --> WARN
[ERROR] 2024-08-31 04:41:58 [http-nio-8080-exec-1] [QueryController1:18] - log --> ERROR

 

4. 또 다른 방식의 로그 테스트

다른 방식으로 로그를 테스트하기 위해 새로운 컨트롤러를 만든다.

package dev.be.logback.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class QueryController2 {

    public static final Logger log = LoggerFactory.getLogger("SQL_LOG2");

    @GetMapping("/query2")
    public String query2() {

        log.trace("log --> TRACE");
        log.debug("log --> DEBUG");
        log.info("log --> INFO");
        log.warn("log --> WARN");
        log.error("log --> ERROR");

        return "query2";
    }
}

 

그리고 logback-spring-prod.xml 파일에 다음과 같이 SQL_LOG2 로거를 추가한다.

    </logger><logger name="SQL_LOG2" level="INFO" additivity="false">
        <appender-ref ref="QUERY"/>
    </logger>

 

이제 curl localhost:8080/query2 명령을 실행하면, SQL_LOG2 로거의 로그도 query.log 파일에 기록된다.

#logback.classic pattern: [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n
[INFO ] 2024-08-31 04:48:00 [http-nio-8080-exec-1] [SQL_LOG2:19] - log --> INFO
[WARN ] 2024-08-31 04:48:00 [http-nio-8080-exec-1] [SQL_LOG2:20] - log --> WARN
[ERROR] 2024-08-31 04:48:00 [http-nio-8080-exec-1] [SQL_LOG2:21] - log --> ERROR

 

이렇게 다양한 방식으로 커스텀 로그를 설정하고 활용하는 방법을 알아보았다. Logback 설정을 통해 로그를 관리하는 방법을 유연하게 적용할 수 있다.