본문 바로가기

프로그래밍/Java

Spring 로그백 RollingFileAppender와 AsyncAppender 차이, logback-spring.xml 설정 예시

반응형

이번에 마무리 지어가는 시스템에서 로그 설정 관련 요청이 들어와 로그백의 RollingFileAppender와 AsyncAppender에 대해 정리해보았습니다.

로그백이 뭔가요?

로그백(Logback)은 자바 언어로 작성된 로깅 프레임워크입니다. 로그백에서는 RollingFileAppender와 AsyncAppender 두 가지 로그 기능을 제공합니다.

RollingFileAppender

RollingFileAppender는 로그 파일을 일정 크기나 기간에 따라 자동으로 분리해서 저장할 수 있는 기능을 제공합니다. 예를 들어, 로그 파일의 크기가 10MB를 넘어가면 새로운 파일을 생성하고 이전 파일에 대한 백업을 생성할 수 있습니다. 이러한 방식으로 로그 파일이 계속해서 늘어나는 것을 방지하고, 필요한 로그 파일만 보관할 수 있도록 해줍니다.

logback RollingFileAppender 설정 예

<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>example.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>example.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>7</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
  </encoder>
</appender>

위 예제에서는 example.log 파일을 생성하고, 이 파일의 크기나 기간에 따라 자동으로 분리할 수 있도록 TimeBasedRollingPolicy를 설정합니다. fileNamePattern 속성은 로그 파일의 이름 형식을 지정하며, maxHistory 속성은 보관하고자 하는 로그 파일의 최대 기간을 설정합니다.

AsyncAppender

AsyncAppender는 로그 메시지를 비동기 방식으로 처리할 수 있는 기능을 제공합니다. 이는 로그 기록이 메인 스레드에서 수행되는 것을 방지하고, 애플리케이션의 성능을 향상시킬 수 있습니다. AsyncAppender는 로그 메시지를 큐(Queue)에 저장하고, 다른 스레드에서 처리하도록 해줍니다. 이를 통해 애플리케이션의 성능을 저하시키지 않고, 로그 기록을 수행할 수 있습니다.

logback AsyncAppender 설정 예

<appender name="Async" class="ch.qos.logback.classic.AsyncAppender">
  <appender-ref ref="RollingFile" />
  <discardingThreshold>0</discardingThreshold>
  <queueSize>512</queueSize>
  <neverBlock>true</neverBlock>
</appender>

위 예제에서는 RollingFileAppender를 AsyncAppender에 참조하도록 설정합니다. discardingThreshold 속성은 로그 메시지를 큐에 저장할 때 버릴 수 있는 메시지의 수를 지정하며, queueSize 속성은 큐의 최대 크기를 설정합니다. neverBlock 속성은 큐가 꽉 찬 상태에서 메시지를 무시할지 아니면 기다릴지 여부를 지정합니다.

이러한 설정을 적용하면, RollingFileAppender와 AsyncAppender를 통해 로그 파일의 분리와 로그 메시지의 비동기 처리를 수행할 수 있습니다.

그래서 어떤걸 써야 할까?

RollingFileAppender는 로그 파일의 크기나 기간에 따라 파일을 자동으로 분리해서 저장하는 기능을 제공하고, AsyncAppender는 로그 메시지를 비동기 방식으로 처리하는 기능을 제공합니다. 두 기능은 서로 다르기 때문에, 로그백을 사용할 때 각 상황에 맞게 적절한 기능을 선택하여 사용해야 합니다.

반응형

개발자가 그리는 인스타툰 팔로우하세요!