일반적으로 클래스패스(classpath)에 있는 설정 파일을 자동으로 참조하므로 Logback 설정 파일은 리소스 폴더 안에 생성함. 파일명의 경우 일반적인 자바 또는 스프링 프로젝트에서는 logback.xml
이름으로 참조하지만, 스프링 부트에서는 logback-spring.xml
파일을 참조함
resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Property 영역 -->
<property name="LOG_PATH" value="./logs"/>
<!-- Appenders 영역 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- Encoder 영역 -->
<encoder>
<!-- Pattern 영역 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
</encoder>
</appender>
<!-- Appenders 영역 -->
<appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>${LOG_PATH}/info.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/info_${type}.%d{yyyy-MM-dd}.gz</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- Encoder 영역 -->
<encoder>
<!-- Pattern 영역 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
</encoder>
</appender>
<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
<!-- Root 영역 -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
</configuration>
%logger
: 패키지 포함 클래스 정보%logger{0}
: 패키지를 제외한 클래스 이름만 출력%logger{length}
: Logger name을 축약할 수 있음. {length}는 최대 자리 수, ex)logger{35}%-5level
: 로그 레벨, -5는 출력의 고정폭 값(5글자), 로깅레벨이i nfo일 경우 빈칸 하나 추가${PID:-}
: 프로세스 아이디%d
: 로그 기록시간 출력%p
: 로깅 레벨 출력%F
: 로깅이 발생한 프로그램 파일명 출력%M
: 로깅일 발생한 메소드의 명 출력%line
: 로깅이 발생한 호출지의 라인%L
: 로깅이 발생한 호출지의 라인%thread
: 현재 Thread 명%t
: 로깅이 발생한 Thread 명%c
: 로깅이 발생한 카테고리%C
: 로깅이 발생한 클래스 명 (%C{2}는 somePackage.SomeClass 가 출력됨)%m
: 로그 메시지%msg
: - 로그 메시지 (=%message)%n
: 줄바꿈(new line)%%
: %를 출력%r
: 애플리케이션 시작 이후부터 로깅이 발생한 시점까지의 시간(ms)%d{yyyy-MM-dd-HH:mm:ss:sss}
: %d는 date를 의미하며 중괄호에 들어간 문자열은 dateformat을 의미. 따라서 [2021-07-12 12:42:78]과 같은 날짜가 로그에 출력됨.%-4relative
: %relative는 초 아래 단위 시간(밀리초)을 나타냄.-4
를하면 4칸의 출력폼을 고정으로 가지고 출력. 따라서 숫자에 따라 [2021-07-12 12:42:78:232] 혹은 [2021-07-12 12:42:78:2332]와 같이 표현됨
@RestController
@RequestMapping("/api/v1/get-api")
public class GetController {
// LOGGER 전역 변수로 Logger 객체 정의. 클래스 정보를 Logger에서 가져가게 함
private final Logger LOGGER = LoggerFactory.getLogger(GetController.class);
...
}
@GetMapping(value = "/name")
public String getName() {
LOGGER.info("getName 메소드가 호출되었습니다."); // info 레벨에서 로그 출력
return "Flature";
}
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
LOGGER.info("@PathVariable을 통해 들어온 값 : {}", variable); // 포매팅을 통해 변수값 로깅 가능
return variable;
}