안녕하세요
로로봉입니다 : )
오늘은 Spring Boot 프로젝트에서 Log 기록을 남겨보도록 하겠습니다.
프로그램을 구현하다보면 디버깅해야할 부분이 많이 생길 것입니다.
REST API를 구현하다 보면 데이터가 어떻게 넘어오는지 확인해야할 때가 있을 것입니다.
그럴 때 Log로 기록한다면 손쉽게 확인이 가능합니다.
라이브러리는 slf4j 와 Lobback 을 사용해 Log를 기록해 보도록 하겠습니다.
1) Dependency 추가
slf4j와 Logback을 사용하기 위해서 build.gradle에 dependencies에 다음과 같이 추가해 주어야 합니다.
implementation('org.slf4j:jcl-over-slf4j')
implementation('ch.pos.logback:logback-classic')
dependency를 추가해주었다면 build.gradle을 선택 후 우측 마우스를 눌러 Gradle > Refresh Gradle Project를 선택해줍니다.
2) logback 설정
/src/main/resources 폴더에 New > Other을 선택하여 logback 설정파일을 만들어 보겠습니다.
[XML 폴더에 XML File을 선택 후 Next를 눌러줍니다.
파일명은 logback-spring.xml로 작성 후 Finish 버튼으로 생성해줍니다.
logback-spring.xml 파일이 만들어지면 아래와 같이 작성해줍니다.
<?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="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3) logback 사용
이제 InfoController.java에서 실제 log.debug를 사용하여 로그를 기록하면 됩니다.
아래와 같이 @Slf4j 어노테이션을 작성해주고 log.debug를 사용합니다.
log에 오류가 발생하면 lombok jar 파일을 해당 프로젝트에 추가해 주어야 합니다.
Project and External Dependencies를 확장하고 lombok-{version}.jar를 찾습니다.
아래와 같이 찾은 lombok-{version}.jar 파일을 선택 후 마우스 우클릭으로 Run as - Java Application을 클릭합니다.
Proceed 버튼을 눌러줍니다.
Lombok 설치 창이 표시되고 IDEs 를 검색하는 동안 기다리면 아래와 같이 Eclipse IDE가 표시됩니다.
저는 D드라이브에 설치해둬서 C드라이브에 있는 Eclipse만 인식되었는데 Specify location... 버튼으로 D드라이브에 있는 Eclipse를 선택하여 추가해 주었습니다.
Install / Update를 눌러줍니다.
설치가 오래 걸리지 않고 바로 전환되는 것을 볼 수 있습니다.
Quit Installer를 눌러 설치 창을 닫아 줍니다.
이클립스를 종료후에 다시 시작해 줍니다.
이제 Project에서 Clean을 선택하여 빌드 설정이 초기화 되도록 해줍니다.
프로젝트 선택이 되어 있는 대로 Clean 버튼을 눌러 줍니다.
아래와 같이 log에 오류 부분이 사라진 것을 볼 수 있습니다.
이제 크롬 브라우저에서 InfoController 가 실행될 수 있도록 호출해줍니다.
아래와 같이 로그가 찍힌 것을 볼 수 있습니다.
4) 로그 레벨 info로 변경
logback 설정 파일에서 로그 레벨을 debug가 아닌 info로 변경하면 info 로그만 콘솔창에 출력 할 수도 있습니다.
아래와 같이 logback-spring.xml 파일에 root level="debug" 되어 있는 부분을 "info"로 변경해줍니다.
이제 InfoController.java 파일에서 debug 로그와 info 로그를 출력하도록 기록하여 비교해 보겠습니다.
기존의 debug 로그를 둔 상태로 하단에 log.info("return {}", prj.toString()); 으로 변경 후 /info 를 호출해보았습니다.
/info를 3번 연속 호출했더니 아래와 같이 Console에 debug가 아닌 info만 출력된 것을 볼 수 있습니다.
5) 로그 파일 저장
이제 logbak-spring.xml 파일의 내용을 변경하여 로그를 파일에 저장해보도록 하겠습니다.
모든 로그는 콘솔에 찍히고, info 이상 레벨만 파일로 저장해보도록 하겠습니다.
우선 logback-spring.xml 파일을 아래와 같이 수정해줍니다.
<?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>
작성한 화면은 아래와 같습니다.
이제 /info를 호출하여 로그를 확인해보면 콘솔에는 debug와 info 로그가 모두 찍히고, logs 폴더에 log.txt 파일에는 info 레벨의 로그가 저장되어지는 것을 볼 수 있습니다.
공감 ♥ + 구독부탁드립니다 : )
'개발 정보 > 웹개발' 카테고리의 다른 글
[웹 개발] Eclipse REST API 구현 - JDBC 사용하여 MySQL 연동하기 (6) | 2022.05.27 |
---|---|
[웹 개발] Eclipse REST API 구현 - Service 생성 (4) | 2022.05.26 |
[웹 개발] Eclipse REST API 구현 - JSON 형식 리턴하기 (4) | 2022.05.23 |
[웹 개발] Eclipse REST API 구현 - SpringBoot 기본 호출 구조 (2) | 2022.05.19 |
[웹 개발] Eclipse REST API 구현 - Sprint Boot 설치 (2) | 2022.05.18 |
댓글