Logback 적용하기
1. logback-spring.xml 문서 추가 (resources > logback-spring.xml문서 추가)
2. logback-spring.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--추가할 기능 삽입-->
<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>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %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>
<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
</configuration>
3. 로그를 적용할 클래스에 멤버변수 선언, 메서드 내부에 로깅 코드 작성
<로그 출력코드 삽입>
@RestController
@RequestMapping("/api/v1/get-api") //url 사용 규칙 "_" 대신에 "-"사용하기
public class GetController {
private final Logger LOGGER = LoggerFactory.getLogger(GetController.class); // 추가 1
@GetMapping(value = "/hello")
public String getHello(){
LOGGER.info("getHello 메소드가 호출되었습니다. "); // 추가 2
return "Hello World";
}
<변수의 값을 로그로 출력하는 방법>
// http://localhost:8090/api/v1/get-api/variable/{String 값} // {}조건 : 1. 받는 쪽 이름은 블록 처리, 2. 메서드 매개변수 이름과 동일
@GetMapping("/variable/{variable}")
public String getVariable1(@PathVariable String variable){
LOGGER.info("@PathVariable을 통해 들어온 값 : ", variable);
return variable;
}
<로깅 기능을 특정 패키지에 적용하는 방법 / 혹은 다른 레벨로 주는 방법>
<logger name = "com.springboot.api.controller" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</logger>
- 만약, 특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root대신 logger를 사용해 지정할 수 있음
- additivity 속성 : 앞에서 지정한 패키지 범위에 하위 패키지를 포함할지 여부를 결정
false ==> 내가 지정한 패키지까지만 사용하겠다는 의미
true ==> 하위 패키지 포함한다는 의미
Logback 적용하기
Appender 영역
: 로그의 형태를 설정하고 어떤 방법으로 출력할지(콘솔, 파일, DB등)를 설정하는 영역
<!-- Appenders -->
<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 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>
- ConsoleAppender : 콘솔에 로그를 출력
- FileAppender : 파일에 로그를 저장
- RollingFileAppender : 여러개의 파일을 순회하면서 로그를 저장
- SMTPAppender : 메일로 로그를 전송
- DMAppender : 데이터베이스에 로그를 저장
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
info라는 레벨로 로깅하겠다.
<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
- TRACE : DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨을 의미 (HIGH 레벨)
Root영역
<!-- Root Logger -->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</root>
- Root영역에서 Appender를 참조해서 로깅레벨을 설정함.
<logger name = "com.springboot.api.controller" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="INFO_LOG"/>
</logger>
- 만약, 특정 패키지에 대해 다른 로깅 레벨을 설정하고 싶다면 root대신 logger를 사용해 지정할 수 있음
- additivity 속성 : 앞에서 지정한 패키지 범위에 하위 패키지를 포함할지 여부를 결정
false ==> 내가 지정한 패키지까지만 사용하겠다는 의미
true ==> 하위 패키지 포함한다는 의미
'👩💻 BackEnd > 🌿 스프링 [Spring]' 카테고리의 다른 글
[Spring MVC] MVC 패턴 한계 (0) | 2024.01.11 |
---|---|
[Spring MVC] JSP 활용 방법 및 MVC 패턴의 등장 배경 (0) | 2024.01.11 |
[Springboot] DAO 설계 (0) | 2023.09.03 |
[SpringBoot] REST API (GET, POST, PUT, DELETE) 작성방법 (0) | 2023.08.31 |
[Spring] 스프링 MVC 기능 (0) | 2023.08.14 |