개요
로깅 라이브러리인 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>