<aside> 💡 사실 MyShop 애플리케이션에서 로그 설정은 했지만 디버그 툴을 사용하기 때문에 많이는 사용하지 않았다. 그렇지만 로그 수집은 향후 유지 보수에 꼭 필요하기 때문에 정리해봤다.

</aside>

로깅이란 애플리케이션이 동작하는 동안 시스템의 상태동작 정보를 시간순으로 기록하는 것을 의미한다.

로깅은 개발 영역 중 비기능 요구사항에 속해 사용자나 고객에게 필요한 기능은 아니지만, 디버깅하거나 개발 이후에 발생한 문제를 해결할 때 원인을 분석하는 데 꼭 필요하다.

자바 진영에서는 slf4j를 기반으로 구현된 Logback이라는 로깅 프레임워크를 가장 많이 사용한다.

Logback의 특징

1. Logback 설정

스프링은 일반적으로 클래스패스(classpath)에 있는 설정 파일을 자동으로 참조하므로 Logback 설정 파일은 리소스 폴더 안에 생성한다.

파일명은 일반적인 자바 or 스프링 프로젝트에서는 logback.xml 을 참조하지만 스프링 부트에서는 logback-spring.xml 파일을 참조한다.

예시 코드

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- Property -->
  <property name="LOG_PATH" value="./logs"/>

  <!-- Appenders -->
  <appender name="console" class="ch.gos.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.gos.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.%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>

1.1. Appender

Appender 영역은 로그의 형태를 설정하고 어떤 방법으로 출력할지를 설정하는 곳이다.

Appender의 상속 구조