본문 바로가기

대성 API 개발

log 남기기( 일반 log 로그 / error 로그)

프로젝트 관련해서 log를 일반로그와 error 로그를 관리하고 싶다는 요청이 들어왔고

logback.xml 파일을 사용한 로깅 설정이 되어있지 않았다.

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 = 보관할 최대 파일 수를 제어하고 이전 파일을 삭제
totalSizeCap - 전체 파일 크기를 제어하며, 전체 크기 제한을 초과하면 가장 오래된 파일을 삭제
totalSizeCap을 사용하기 위해서는 maxHistory가 필수 속성으로 
maxHistory와 totalSizeCap의 우선순위는 maxHistory가 우선

 

 

'대성 API 개발' 카테고리의 다른 글