
스프링부트 핵심가이드 책을 참고하여 정리해보는 시간을 가져보려고 합니다!
로깅은 로그를 생성하도록 시스템을 작성하는 활동이며 시스템의 상태, 정보등을 시간순으로 기록하는 것을 말합니다.
로깅 프레임워크인 Logback은 slf4j를 기반으로 구현되었으며 spring-boot-starter-web 라이브러리 내부에 내장이 되어있어 의존성을 추가하지 않아도 됩니다.
그리고 실제 운영환경, 개발환경에서 각각 다른 출력 레벨을 설정해서 로그를 확인할 수 있습니다.
Logback을 사용하기 위해서는 설정파일을 만들어야하며
resources 폴더에 loback-spring.xml 파일을 만듭니다.
Logback 설정 파일을 작성하기 위해서는 특정 영역이 존재하며
property, appender, encoder, pattern, root 영역이 있는데 appender와 root 영역에 대해서 알아보겠습니다.
appender 영역은 로그의 레벨을 설정하고 어떤 방법으로 출력할것인지를 설정하는 영역입니다.
appender class에는 아래와 같이 구성되어있습니다.
filter요소로 각 Appender가 어떤 레벨의 로그로 기록할지 지정해줄 수 있습니다.
encoder 요소로 로그의 표현 형식을 패턴으로 정의하여 출력될 로그의 시간, 로그레벨, 스레드명, 로그메시지를 정할 수 있습니다.
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread]%logger %msg%n</pattern>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread]%logger %msg%n</pattern>
</encoder>
</appender>
Appender를 정의하였으면 Root 영역에서 이를 참조하여 로깅레벨을 설정하거나 패키지 단위로 로깅이 적용될 범위를 지정하거나 level 속성으로 로그레벨을 지정해줍니다.
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 로그파일 저장 경로 -->
<property name="LOG_DIR" value="/Users\kwon\Desktop\code\spring/logback"/>
<!-- Appenders -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} : %30logger{5} - %msg%n</pattern>
</encoder>
</appender>
<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>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5level][%thread]%logger %msg%n</pattern>
</encoder>
</appender>
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
</configuration>
변수의 값을 로그에 출력하려면 {}로 지정하면 됩니다.
LOGGER.info("get 메소드가 호출되었습니다. @RequestParam으로 들어온 값 : {}",name,age);
//GetController.java
@RestController
@RequestMapping("/api")
public class GetController {
private final Logger LOGGER =
LoggerFactory.getLogger(GetController.class);
@ApiOperation(value="GET 메소드 예제",
notes="@getVariable을 활용한 GET 메소드입니다.")
@GetMapping(value = "/get")
public String getVariable(
@ApiParam(value="이름",required = true)
@RequestParam String name,
@ApiParam(value="나이",required = true)
@RequestParam String age) {
LOGGER.info("get 메소드가 호출되었습니다. @RequestParam으로 들어온 값 : {}", name,age);
return "Name: " + name +", Age: " + age;
}
}
아래와 같이 "get 메소드가 호출되었습니다 이후에 변수값이 정상적으로 나오는것을 확인할 수 있습니다.
