[Spring boot] 로깅

readerr·2024년 6월 19일

들어가며

스프링 부트에서 의존성을 활용해 로그를 저장하는 방법은 2가지가 존재합니다.
Logback + slf4j 조합으로 사용하는 방식과 Log4j를 사용하는 방법인데, 프로그램별로 원하는 로깅 수준에 따라 선택이 가능합니다.
스프링부트의 기본 설정은 Logback + slf4j 조합으로 사용하며, Log4j보다 간단하고 가볍고, 빠르며 효율적입니다.
반대로 Log4j는 설정이 비교적 복잡하지만 더 유연하며, 높은 확장성 및 세밀한 커스터마이징이 가능합니다.
오늘은 그중 일반적으로 사용되는 logback으로 사용하겠습니다.

Log4j vs Logback + slf4j

Logback + slf4j 사용해보기

Spring boot 설치는 되어있을거라 가정합니다.
1. loback 세팅
먼저 프로젝트에서 ./src/main/resources/logback.xml을 만듭니다.
그다음 기본 세팅을 하는 코드를 넣습니다. 콘솔에 출력되는 로그와 파일에 출력되는 로그를 설정했고, 데일리로 로그 파일을 생성하며 최대 보관 기간은 30일, 로그 레벨은 info로 했습니다.

<configuration>
    <!-- 콘솔에 출력되는 로그 설정 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 파일에 출력되는 로그 설정 -->
    <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/Users/woong/Downloads/log/logs/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 파일 이름에 날짜를 추가하여 일별로 롤링 -->
            <fileNamePattern>/logs/logback-%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 최대 보관 기간 (30일) 설정 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 로그 레벨 설정 -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="ROLLING" />
    </root>
</configuration>
  1. 출력 및 파일 생성 테스트
    간단하게 main에서 테스트해보겠습니다.
    Logger 객체를 생성해 info와 debug를 출력 후 오류가 발생한 경우 error 로그를 남기는 간단한 로그입니다.
package com.woong.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LogApplication {

	public static void main(String[] args) {
		testLogback();
		SpringApplication.run(LogApplication.class, args);
	}

	public static void testLogback() {
		Logger logger = LoggerFactory.getLogger(LogApplication.class);

		logger.info("Logback + slf4j 조합 테스트 start");
		try {
			logger.debug("Performing task");
			throw new Exception();
		} catch (Exception e) {
			logger.error("An error occurred while performing the task", e);
		}
		logger.info("Logback + slf4j 조합 테스트 end");
	}

}
profile
Back-end Developer

0개의 댓글