개발 정보/웹개발

[웹 개발] Eclipse REST API 구현 - Log 기록 남기기

RoRoBong 2022. 5. 24. 08:48
728x90

안녕하세요

로로봉입니다 : )

오늘은 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')

[ 그림 1 : dependency 추가 ]

dependency를 추가해주었다면 build.gradle을 선택 후 우측 마우스를 눌러 Gradle > Refresh Gradle Project를 선택해줍니다.

[ 그림 2 : Refresh Gradle ]


2) logback 설정

/src/main/resources 폴더에 New > Other을 선택하여 logback 설정파일을 만들어 보겠습니다.

[ 그림 3 : resouces 폴더 파일 추가 ]

[XML 폴더에 XML File을 선택 후 Next를 눌러줍니다.

[ 그림 4 : XML File 선택 ]

파일명은 logback-spring.xml로 작성 후 Finish 버튼으로 생성해줍니다.

[ 그림 5 : XML 파일 생성 ]

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>

[ 그림 6 : logbak-spring.xml 작성 완료 ]

 

 

 

 

 


3) logback 사용

이제 InfoController.java에서 실제 log.debug를 사용하여 로그를 기록하면 됩니다.

아래와 같이 @Slf4j 어노테이션을 작성해주고 log.debug를 사용합니다.

[ 그림 7 : logback 사용 ]

log에 오류가 발생하면 lombok jar 파일을 해당 프로젝트에 추가해 주어야 합니다.

Project and External Dependencies를 확장하고 lombok-{version}.jar를 찾습니다.

아래와 같이 찾은 lombok-{version}.jar 파일을 선택 후 마우스 우클릭으로 Run as - Java Application을 클릭합니다.

[ 그림 8 : lombook 컴파일 ]

Proceed 버튼을 눌러줍니다.

[ 그림 9 : Proceed 버튼 클릭 ]

Lombok 설치 창이 표시되고 IDEs 를 검색하는 동안 기다리면 아래와 같이 Eclipse IDE가 표시됩니다.

저는 D드라이브에 설치해둬서 C드라이브에 있는 Eclipse만 인식되었는데 Specify location... 버튼으로 D드라이브에 있는 Eclipse를 선택하여 추가해 주었습니다.

Install / Update를 눌러줍니다.

[ 그림 10 : Lombok 설치 ]

설치가 오래 걸리지 않고 바로 전환되는 것을 볼 수 있습니다.

Quit Installer를 눌러 설치 창을 닫아 줍니다.

[ 그림 11 : Lombok 설치 완료 ]

이클립스를 종료후에 다시 시작해 줍니다.

[ 그림 12 : 이클립스 재시작 ]

이제 Project에서 Clean을 선택하여 빌드 설정이 초기화 되도록 해줍니다.

[ 그림 13 : 프로젝트 Clean 선택 ]

프로젝트 선택이 되어 있는 대로 Clean 버튼을 눌러 줍니다.

[ 그림 14 : 프로젝트 Clean 실행 ]

아래와 같이 log에 오류 부분이 사라진 것을 볼 수 있습니다.

[ 그림 15 : log 오류 해결 ]

이제 크롬 브라우저에서 InfoController 가 실행될 수 있도록 호출해줍니다.

[ 그림 16 : /Info 호출 ]

아래와 같이 로그가 찍힌 것을 볼 수 있습니다.

[ 그림 17 : 로그 기록 완료 ]

 

 

 


4) 로그 레벨 info로 변경

logback 설정 파일에서 로그 레벨을 debug가 아닌 info로 변경하면 info 로그만 콘솔창에 출력 할 수도 있습니다.

아래와 같이 logback-spring.xml 파일에 root level="debug" 되어 있는 부분을 "info"로 변경해줍니다.

[ 그림 18 : log 레벨 설정 변경 ]

이제 InfoController.java 파일에서 debug 로그와 info 로그를 출력하도록 기록하여 비교해 보겠습니다.

기존의 debug 로그를 둔 상태로 하단에 log.info("return {}", prj.toString()); 으로 변경 후 /info 를 호출해보았습니다.

/info를 3번 연속 호출했더니 아래와 같이 Console에 debug가 아닌 info만 출력된 것을 볼 수 있습니다.

[ 그림 19 : 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>

작성한 화면은 아래와 같습니다.

[ 그림 20 : logback-spring.xml 수정 ]

이제 /info를 호출하여 로그를 확인해보면 콘솔에는 debug와 info 로그가 모두 찍히고, logs 폴더에 log.txt 파일에는 info 레벨의 로그가 저장되어지는 것을 볼 수 있습니다.

[ 그림 21 : 로그 파일 기록 완료 ]

 

공감 ♥ + 구독부탁드립니다 : )

728x90
반응형