본문 바로가기

Backend/Spring

Spring Boot logback.xml 설정

logback.xml 파일을 사용해서 로깅 설정을 해볼게요.

스프링부트에서는 application.yml으로 로깅 설정이 가능하지만 할 수 있는 기능이 많지는 않아요.

그래서 실제 어느 정도 규모 있는 서비스를 운영하기 위해선 xml 파일로 설정해두는 것이 좋아요.

 

src/main/resources 경로 밑에 logback-spring.xml 파일을 만들어주세요.

그러면 자동으로 애플리케이션을 실행할 때 파일을 읽어 설정값을 적용합니다.

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <springProperty name="filePath" source="logging.file.path"/>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${filePath}/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${filePath}/app.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>1GB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <maxHistory>10</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${filePath}/error.log</file>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${filePath}/error-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="INFO">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="APP_FILE"/>
    <appender-ref ref="ERROR_FILE"/>
  </root>
</configuration>

application.yml

logging:
  file:
    path: /Users/hong/Logs/kotlin-spring

 

springProperty 태그로 application.yml에 있는 값을 가져올 수 있어요.

태그명과 값을 보면 어떤 설정인지 대강 알 수 있어요.

app.%d{yyyy-MM-dd}.%i.gz : 하루가 지나면 압축하여 파일을 저장하구요.

maxFileSize : 파일 용량이 넘어가면 하루가 지나지 않아도 파일이 생성되여 아래 캡처와 같이여

maxHistory: 최대 파일을 몇 일 보관할지를 나타내요.

root level을 INFO로 정했고, 에러 로그는 별도 파일에도 출력되도록 하였어요.

 

 

코드 그대로 붙이고 application.yml의 로그 경로 설정만 바꿔주시면 동작합니다.