Logback
- 자바 오픈소스 로깅 프레임워크,
SLF4J
의 구현체- 로그 라이브러리에는
Logback
,Log4J
,Log4J2
등 수많은 라이브러리가 있는데, 이를 통합해서 인터페이스로 제공하는 것이SLF4J
라이브러리이다.
- 실무에서는 스프링 부트가 기본으로 제공하는
Logback
을 대부분 사용log4j
,log4j2
등과 성능을 비교했을 때에도logback
이 더 훌륭한 성능을 보여준다.- 스프링 부트에 기본으로 설정되어 있어서 사용시 별도로 라이브러리를 추가하지 않아도 된다.
spring-boot-starter-web
안에spring-boot-starter-logging
에 구현체가 있다.Logback
을 이용하여 로깅을 수행하기 위해서 필요한 주요 설정요소로는Logger
,Appender
,Encoder
의 3가지가 있다.
logging.config=classpath:logback-dev.xml
- log 설정 파일의 이름을
logback-spring.xml
로 사용한다면 기본으로 적용되므로 application.properties에 작성해주지 않아도 된다.classpath
: java directory 밑에 있는 패키지가 resources directory에서는 생략되어 있다. classpath는 생략된 경로를 작성해준다.
개발용, 배포용 프로필에 따라 로그 파일도 다르게 설정할 수 있다.
- 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