[Spring Boot] 로그 설정하기 - Logback

우롱차·2022년 11월 9일
2

Spring Boot

목록 보기
5/7

Logback

  • 자바 오픈소스 로깅 프레임워크, SLF4J의 구현체
  • 로그 라이브러리에는 Logback, Log4J, Log4J2 등 수많은 라이브러리가 있는데, 이를 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리이다.
    • 실무에서는 스프링 부트가 기본으로 제공하는 Logback을 대부분 사용
  • log4j, log4j2 등과 성능을 비교했을 때에도 logback이 더 훌륭한 성능을 보여준다.
  • 스프링 부트에 기본으로 설정되어 있어서 사용시 별도로 라이브러리를 추가하지 않아도 된다.
  • spring-boot-starter-web 안에 spring-boot-starter-logging에 구현체가 있다.
  • Logback을 이용하여 로깅을 수행하기 위해서 필요한 주요 설정요소로는 Logger, Appender, Encoder의 3가지가 있다.

📃 Spring Boot Logback 설정

📎 application.properties 설정

  • log 설정 파일의 경로를 작성해준다.
logging.config=classpath:logback-dev.xml
  • log 설정 파일의 이름을 logback-spring.xml로 사용한다면 기본으로 적용되므로 application.properties에 작성해주지 않아도 된다.
  • classpath: java directory 밑에 있는 패키지가 resources directory에서는 생략되어 있다. classpath는 생략된 경로를 작성해준다.

📎 logback-dev.xml 파일 생성

개발용, 배포용 프로필에 따라 로그 파일도 다르게 설정할 수 있다.

  • logback-dev.xml은 개발용 로그 파일
  • 파일 위치

  • 코드

    Log level
    1. ERROR : 오류 메시지 표시
    2. WARN : 경고성 메시지 표시
    3. INFO : 정보성 메시지 표시
    4. DEBUG : 디버깅하기 위한 메시지 표시
    5. TRACE : Debug보다 훨씬 상세한 메시지 표시
    ex) log level을 INFO로 설정하면 INFO 이하(ERROR, WARN, INFO)의 로그가 출력된다.

<?xml version="1.0" encoding="UTF-8"?>
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration scan="true" scanPeriod="60 seconds">
    <!-- 로그 파일이 저장될 경로 -->
    <property name="LOG_PATH" value="log"/>
    <!-- 로그 파일 이름 -->
    <property name="LOG_FILE_NAME" value="wrsungRestApi"/>
    <!-- 로그 출력 패턴 -->
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] [%logger{40}] - %msg%n"/>
    <!-- 로그 레벨 -->
    <!--
    	1) ERROR : 오류 메시지 표시
        2) WARN  : 경고성 메시지 표시
        3) INFO  : 정보성 메시지 표시
        4) DEBUG : 디버깅하기 위한 메시지 표시
        5) TRACE : Debug보다 훨씬 상세한 메시지 표시
        아래에서는 info로 설정하였는데, 이 경우엔 INFO보다 위에 있는 DEBUG와 TRACE는 표시하지 않는다.
    -->
    <property name="LOG_LEVEL" value="info"/>

    <!-- CONSOLE에 로그 출력 세팅 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>${LOG_PATTERN}</Pattern>
        </encoder>
    </appender>

    <!-- File에 로그 출력 세팅 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 파일 경로 설정 -->
        <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
        <!-- 출력패턴 설정-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <!-- Rolling 정책 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM, aux}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
            <!-- <maxHistory>30</maxHistory> -->
            <!-- 로그 파일 최대 보관 크기. 최대 크기를 초과하면 가장 오래된 로그 자동 제거 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!-- 로그 전역 세팅 -->
    <root level="${LOG_LEVEL}">
        <!-- 위에 설정한 콘솔 설정 추가 -->
        <appender-ref ref="CONSOLE"/>
        <!-- 위에 설정한 파일 설정 추가 -->
        <appender-ref ref="FILE"/>
    </root>
</configuration>

로그 파일 경로

  • 절대 경로
    • 경로 앞에 /를 넣어주면 로컬 디스크(C:) 아래에 파일이 생성된다.
    • ex) /logs/local 위치에 로그 파일이 생성된 것을 확인할 수 있다.
  • 상대 경로
    • 경로 앞에 / 없이 경로를 설정하면 프로젝트 내에 파일이 생성된다.
    • ex) 프로젝트 내에 로그 파일이 생성된 것을 확인할 수 있다.

TIP

  • 로그를 읽을 때는 시간 순서가 중요하므로 로그 파일을 분리하지 않고 하나의 파일로 만드는 것이 좋다.
    • 분리한다면 여러 파일을 찾아봐야 하는 경우가 발생
  • 로그 출력 패턴을 정할 때도 시간이 맨 앞에 나오는 것이 좋다.
    • 간발의 차이로 실행되는 순서에 따라 오류가 발생하는 경우도 있기 때문에 ms 단위까지 설정하는 것이 좋다.

.gitignore

  • git에 commit할 때 올리지 않을 내용들을 설정하는 파일이다.
  • 로그 파일을 git에 업로드하면 크기가 커지고 로그 내용을 업로드할 필요가 없으므로 .gitignore에 설정해준다.
  • 설정 방법
    • gitignore.io에서 운영체제, 개발환경, 프로그래밍 언어를 설정해주면 코드를 자동으로 생성해준다.
    • 코드를 복사해 .gitignore에 넣어준다.
    • 추가로 설정하고 싶은 내용을 작성한다.
      • log 경로에 있는 파일들은 commit되지 않는다.

📌 참고 사이트

[스프링부트 (5)] Spring Boot 로그 설정(1) - Logback
[Spring Boot] LogBack 설정


Source Code
https://github.com/wooryung/REST_API_Basic.git

profile
아직 따끈따끈합니다🍵

0개의 댓글