이전 글
Json 형태의 데이터 반환까지 끝났으면 이제 URL을 접근시의 Log를 찍어보도록 하자.
1. dependency 추가
먼저 slf4j+logback를 사용할 수 있도록 의존성을 추가해야 한다.
이클립스 파일 하단의 pom.xml 파일을 열어주도록 한다.
spring-boot-starter-web 라이브러리가 있으면(spring boot이면) logback-classic, logback-core가 탑재되어있어서 별도 dependecy를 추가할 필요가 없다.
spring-boot-starter-web이 없으면 아래와 같이 추가해주도록 하자.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>syc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>syc</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
이제 아래와 같이 챕터 1에서 설치한 lombok jar 파일을 실행하도록 한다.
실행 후 아래와 같이 추가 되었으면 프로젝트를 재시작
2. logback 설정
이제 아래와 같이 logback-spring.xml 파일을 resources 디렉토리 하단에 추가하도록 한다.
*주의 : 파일 생성시에 파일명은 위와 동일해야 한다.
추가된 파일에 다음과 같이 logback 설정 코드를 입력한다
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3. log 출력
추가되었으면 /info 컨트롤러에 로그를 호출하는 log를 추가한다.
이제 http://localhost:8080/info로 접근하여 cosole창에서 log가 찍히는지를 확인하자.
package com.example.demo;
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import model.Project;
@Slf4j
@RestController
public class MainController {
@GetMapping("/info")
public Object projectInfo() {
log.debug("/info access");
Project project = new Project();
project.projectName = "preword";
project.author = "hello-bryan";
project.createdDate = new Date();
log.info("return {}", project.toString());
return project;
}
}
log File 저장
다음은 logback을 이용한 파일로 접근 시 로그를 남기는 방법이다.
logback-spring.xml log 파일을 아래코드처럼 수정하도록 한다.
- console 모든 log 출력
- info 이상 파일로 출력
- 접근시간 자동 기록
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<property name="LOG_DIR" value="logs"></property>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level] : %msg%n</pattern>
</encoder>
</appender>
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<file>${LOG_DIR}/log.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 100MB -->
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%-5level] %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ROLLING"/>
</root>
</configuration>
이제 프로젝트를 Refresh해보자
자동으로 logs 디렉토리가 생성되고 아래와 같이 하단에 log.txt 파일이 생성되게 된다.
마치며..
개발자가 log를 콘솔에서 모두 추척하는것은 한계가 있다.
특히 소스에서 오류가 발생하거나 크리티컬한 서버문제가 터지면 빠르게 문제를 파악해야하는데
위와 같이 파일로 내용을 기록해두면 시간이랑 접근 URL만으로 쉽게 오류를 확인할 수 있다.
또한 스케쥴러에서 배치를 돌릴떄도 오류가 발생할떄의 문제들을 log로 남기는등 개발자한테는 다방면에서 사용빈도가 높고 활용도가 좋은 라이브러리라고 생각된다.
끝
'백엔드 > Spring Boot' 카테고리의 다른 글
[Spring Boot] REST API 만들기 (4) - MySQL + JDBC Template (0) | 2021.10.12 |
---|---|
[Spring Boot] REST API 만들기 (3) - Service 생성 (0) | 2021.10.12 |
[Spring Boot] REST API 만들기 (1) - Json 반환 방법 (0) | 2021.10.07 |
[이클립스] 스프링 부트 cannot resolved (0) | 2021.10.07 |
[이클립스] 스프링 부트 초기 세팅 (0) | 2021.10.07 |