본문 바로가기

카테고리 없음

Logback 설정 파일 작성하기

개요

로깅 라이브러리인 Logback 을 설정하여 다양하게 사용해보자

 

Logback 설정

Logback 을 설정하기 위해 slf4j 와 logback 라이브러리를 준비한다.

스프링 부트는 기본적으로 이를 제공해준다.

 

스프링 부트를 사용하고 있지 않으시면, 아래 라이브러리를 등록해 줍니다.

dependencies {
    implementation 'ch.qos.logback:logback-classic:1.5.6'
    implementation 'ch.qos.logback:logback-core:1.5.6'
    implementation 'org.slf4j:slf4j-api:2.1.0-alpha1'
}

 

 

다음으로 resources 하위에 loback.xml 파일을 생성합니다.

 

 

 

logback 파일을 열어 아래내용을 복사해줍니다.

<configuration>
    <!-- 환경변수 -->
    <property name="LOG_FILE" value="application.log"/>

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

    <!-- 파일 출력 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>application.%d{yyyy-MM-dd_HH-mm}.log.gz</fileNamePattern>
            <maxHistory>5</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Logger 설정 -->
    <root level="trace">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

property 는 환경변수입니다. 원하시는 변수를 등록하여 다른 태그내에서 사용할 수 있습니다.

 

appender 는 로그 메시지를 출력할 대상을 정의하는 구성 요소입니다.

 

root 태그의 appender-ref 를 통해 Appender 를 Logger 와 연결해 주시면 됩니다.

 

 

Appender 의 주요 클래스 

 

1. ConsoleAppender

 로그를 콘솔(표준 출력)로 출력 

 클래스 ch.qos.logback.core.ConsoleAppender

# xml
<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>

 

2. FileAppender

 로그를 특정 파일에 기록

 클래스 ch.qos.logback.core.FileAppender

# xml
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/application.log</file>
    <append>true</append>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

 

 

3. RollingFileAppender

 파일 크기나 날짜에 따라 새로운 로그 파일로 회전(파일분할)

 클래스 ch.qos.logback.core.rolling.RollingFileAppender

 

# xml
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

 

 

4. AsyncAppender

 비동기적으로 로그를 처리해 성능 향상

 클래스 ch.qos.logback.classic.AsyncAppender

# xml
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE"/>
</appender>

 

이외에도 다양한 Appender 가 존재합니다.

 

적용 결과

 

localhost:8080/log 를 호출하게 되면

 

Console 로 설정한 로그와 

 

File 로 설정한 로그 파일이 생성되어있는 것을 보실수 있습니다.

 

이때 *.log.gz 으로 파일이 생성되어 있는 것을 보실 수 있는데,

파일 설정에서 gz 으로 설정하였기 때문입니다.

 

만약 기본 파일로 저장하고 싶으시면 gz 을 빼시면됩니다.

gz 으로 파일을 저장하는 이유는 로그 파일의 용량을 줄이기 위해서 입니다.

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                                                        <!-- 이 부분 -->
            <fileNamePattern>application.%d{yyyy-MM-dd_HH-mm}.log.gz</fileNamePattern>
            <maxHistory>5</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>