스프링부트는 SLF4J를 이용하여 로그를 관리한다.
스프링부트거 사용하는 SLF4J는 로깅 프레임워크가 아니라, 복잡한 로깅 프레임워크들을 쉽게 사용할 수 있도록 도와주는 퍼사드이다.
💡 퍼사드 : 복잡한 서브 시스템을 쉽게 사용할 수 있도록 간단하고 통일된 인터페이스를 제공한다.
예를 들어 TV를 볼 때, TV 내부의 부품들의 작업을 사용자는 알지 못하더라도 리모콘을 이용하여 TV를 켜고 끄고, 볼륨을 올리고 내리는 등의 작업이 가능한 것과 같은 원리
→ 프레임워크와의 의존성이 낮아져 쉽게 사용하고 교체가 가능하다.
스프링 부트는 기본적으로 SLF4J를 이용하여 LogBack을 사용한다.
로그 출력 테스트를 위한 LoggingRunner 클래스 작성
src/main/java/com/ze/board/LoggingRunner.java
package com.ze.board;
// import
@Service
public class LoggingRunner implements ApplicationRunner {
// SLF4J에서 제공하는 LoggerFactory를 통해 logger 획득
private Logger logger = LoggerFactory.getLogger(LoggingRunner.class);
@Override
public void run(ApplicationArguments args) throws Exception {
logger.trace("TRACE");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
스프링부트는 추가적인 설정이 없을 경우, 기본적으로 로그 레벨이 INFO이다.
로그 레벨
레벨 | 의미 |
---|---|
ERROR | 사용자 요청을 처리하는 중 문제 발생 |
WARN | 처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 문제 |
INFO | 로그인이나 상태변경과 같은 정보성 메세지 |
DEBUG | 개발시 디버깅 목적으로 출력하는 메세지 |
TRACE | DEBUG보다 좀 더 상세한 메세지 |
로그레벨이 INFO인 경우, INFO 이상 레벨의 로그만 출력하기 때문에 위 코드는 info, warn, error만 출력된다.
로그레벨 조정을 위해서는 application.properties 파일을 수정한다
appication.properties
## Logging Setting
logging.level.com.ze.board=trace
로그레벨 설정 후 애플리케이션을 실행 시키면 아래와 같이 출력된다.
스프링 부트가 제공하는 설정파일을 사용하지 않고 직접 로그 관련 설정을 제어하려면 src/main/resources에 logback.xml 파일을 생성한다.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>src/main/resources/logs/board_log.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
src/main/resources/logs/board.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n
</pattern>
</encoder>
</appender>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{yyyy:MM:dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{35} : %msg %n
</pattern>
</encoder>
</appender>
<logger name="com.ze.board" level="warn" additivity="false">
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</logger>
<root level="error">
<appender-ref ref="consoleAppender" />
</root>
</configuration>