본문 바로가기

👩‍💻 BackEnd/🌿 스프링 [Spring]

[Springboot] 로깅 라이브러리 - Logback

Logback 적용하기 

 
1. logback-spring.xml 문서 추가 (resources > logback-spring.xml문서 추가)


2. logback-spring.xml 작성 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!--추가할 기능 삽입--> 
    <property name="LOG_PATH" value="./logs"/>

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

    <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>${LOG_PATH}/info.log</file> <!--파일 저장 경로 지정-->
        <append>true</append> 
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/info_${type}.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

    <!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
    <!-- Root Logger -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="INFO_LOG"/>
    </root>
</configuration>

3. 로그를 적용할 클래스에 멤버변수 선언, 메서드 내부에 로깅 코드 작성 
<로그 출력코드 삽입>
 

@RestController
@RequestMapping("/api/v1/get-api")   //url 사용 규칙 "_" 대신에 "-"사용하기
public class GetController {

    private final Logger LOGGER = LoggerFactory.getLogger(GetController.class); // 추가 1

    @GetMapping(value = "/hello")
    public String getHello(){
        LOGGER.info("getHello 메소드가 호출되었습니다. "); 		// 추가 2

        return "Hello World";
    }

 

 

<변수의 값을 로그로 출력하는 방법>

    // http://localhost:8090/api/v1/get-api/variable/{String 값}   // {}조건 : 1. 받는 쪽 이름은 블록 처리, 2. 메서드 매개변수 이름과 동일
    @GetMapping("/variable/{variable}")
    public String getVariable1(@PathVariable String variable){
        LOGGER.info("@PathVariable을 통해 들어온 값 : ", variable);

        return  variable;
    }

<로깅 기능을 특정 패키지에 적용하는 방법 / 혹은 다른 레벨로 주는 방법>  

    <logger name = "com.springboot.api.controller" level="INFO" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="INFO_LOG"/>
    </logger>

- 만약, 특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root대신 logger를 사용해 지정할 수 있음
additivity 속성 : 앞에서 지정한 패키지 범위에 하위 패키지를 포함할지 여부를 결정 
  false ==> 내가 지정한 패키지까지만 사용하겠다는 의미 
  true  ==> 하위 패키지 포함한다는 의미 
 


실행 결과 화면

 


Logback 적용하기

 
Appender 영역 
: 로그의 형태를 설정하고 어떤 방법으로 출력할지(콘솔, 파일, DB등)를 설정하는 영역 

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

    <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>${LOG_PATH}/info.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/info_${type}.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

- ConsoleAppender : 콘솔에 로그를 출력 
- FileAppender : 파일에 로그를 저장 
- RollingFileAppender : 여러개의 파일을 순회하면서 로그를 저장 
- SMTPAppender : 메일로 로그를 전송 
- DMAppender : 데이터베이스에 로그를 저장 
 

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

info라는 레벨로 로깅하겠다. 

<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->

 
- TRACE : DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨을 의미 (HIGH 레벨) 
 
Root영역 

    <!-- Root Logger -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="INFO_LOG"/>
    </root>

- Root영역에서 Appender를 참조해서 로깅레벨을 설정함. 

    <logger name = "com.springboot.api.controller" level="INFO" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="INFO_LOG"/>
    </logger>

- 만약, 특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root대신 logger를 사용해 지정할 수 있음 
- additivity 속성 : 앞에서 지정한 패키지 범위에 하위 패키지를 포함할지 여부를 결정 
  false ==> 내가 지정한 패키지까지만 사용하겠다는 의미 
  true  ==> 하위 패키지 포함한다는 의미