본문 바로가기
JAVA/SpringBoot

[SpringBoot] Logback 설정

by 설총이 2023. 7. 27.
1. Logback 설정파일 형식

2. appender

 

3. encoder

 

4. root

 

5. 로그 레벨

설명1) TRACE > DEBUG > INFO > WARN > ERROR > OFF (OFF도 존재)

 

6. 패턴

추가설명1) %-5lovel: 로그레벨의 가장 긴 길이가 5길이여서 5로 설정
추가설명2) %logger{30} 으로 지정할 시, 긴 패키지명을 압축해준다.

7. 로그 색 설정하기

  • %highlight를 이용하여 로그 레벨에 따른 색을 줄수 있다.
  • %black, %red, %green, %yellow, %blue, %magenta, %cyan, %white, %gray, %boldRed, %boldGreen, %boldYellow, %boldBlue, %boldMagenta, %boldCyan, %boldWhite를 이용 할 수도 있다.
  • 적용 범위는 ()로 %highlight([%-5level]) 이와 같이 사용 가능하다.

 

8. (실습) LOGGER 사용해보기

1) logback-spring.xml 설정

 

2) 프로젝트 내 LOGGER 호출

3) 로그 확인

 

추가테스트1) ConsoleAppender 외 RollingFileAppender 추가

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"> <!-- logback 구현체가 설정을 확인하는 주기 -->
    <property name="moduleId" value="intellij_springboot"/><!-- moduleId는 프로젝트가 설치된 폴더명 또는 구분할 수 있는 식별자이면 됨 -->
    <property name="type" value="intellij"/><!-- 로그파일명을 구성하는 인자 -->
    <property name="logback" value="logback"/><!-- log를 저장할 최종 디렉토리명 -->
    <property name="logdir" value="C:\\Spring Boot\\IntelliJ_SpringBoot\\log"/>

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

    <!-- RollingFileAppender -->
    <appender name="DEBUG_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
      </filter>
      <file>${logdir}/${moduleId}/${logback}/debug_${type}.log</file>
      <append>true</append>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${logdir}/${moduleId}/${logback}/debug_${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>
    <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
      </filter>
      <file>${logdir}/${moduleId}/${logback}/info_${type}.log</file>
      <append>true</append>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${logdir}/${moduleId}/${logback}/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>

    <appender name="WARN_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
      </filter>
      <file>${logdir}/${moduleId}/${logback}/warn_${type}.log</file>
      <append>true</append>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${logdir}/${moduleId}/${logback}/warn_${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>
    <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>WARN</level>
      </filter>
      <file>${logdir}/${moduleId}/${logback}/error_${type}.log</file>
      <append>true</append>
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${logdir}/${moduleId}/${logback}/error_${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="DEBUG_LOG" />
        <appender-ref ref="INFO_LOG" />
        <appender-ref ref="WARN_LOG" />
        <appender-ref ref="ERROR_LOG" />
    </root>
</configuration>


이슈1) C:\Spring Boot\IntelliJ_SpringBoot\log 경로에 로그가 별도로 저장되지 않는다.
해결방법) 파일경로 \\ 2개로 선언 <property name="logdir" value="C:\\Spring Boot\\IntelliJ_SpringBoot\\log"/>