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

    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
    반응형

    댓글