관리 메뉴

나만의공간

Spring Boot Project Initializr (log4j 연결) #4 본문

IT/Spring

Spring Boot Project Initializr (log4j 연결) #4

밥알이 2022. 1. 5. 09:30

연재순서

1. Spring Boot Project Initializr (스프링 부트 프로젝트 생성법)
2. Spring Boot Project Initializr (RestFul API 연결)
3. Spring Boot Project Initialzr (Swagger 연결)  
4. Spring Boot Project Initializr (Log4j 연결)
5. Spring Boot Project Initializr (Requet Get/Post 출력)
6. 번외 : Spring Boot War 파일 생성, 로컬 Tomcat 뛰우기
7.  Srping Boot Project Initializr (GitHub 위치) 

이번 연재에서는 logback을 이용한 로그 출력을 연결하고자 합니다.
많은 개발자들이 개발을 하다보면 log를 많이 출력하게 됩니다. 이때 많이 사용하는게 logback 패키지를 이용한 로그 출력입니다.

주의 사항
현재 apache log4j 버그로 인하여 logback / slf4j 등 관련 패키지에 패치가 계속적으로 발생하고 있습니다.
최신 패치를 적용하여 예제를 만들어야 하나, 최신 패치를 적용시 정상적인 동작이 안되고 있어, 버그가 있는 패키지를 import하여 예제를 만들게 되었습니다.

개발방법을 익히는게 목적이므로 향후 보안패치가 완료되어 안정화 되면 패키지 버전은 변경하시기 바랍니다.

Apache Log4j 보안결함 : https://bobr2.tistory.com/entry/Apache-Log4J-치명적-보안결함-발견

 

Apache Log4J 치명적 보안결함 발견

관련 기사 안녕하세요? 이스트시큐리티 ESRC(시큐리티대응센터) 입니다. Apache Log4j 2 에서 발생하는 취약점(CVE-2021-44228)을 통해 악성코드 감염 등의 피해가 발생할 수 있어 최신 버전으로 긴급 업

bobr2.tistory.com

 

log4j를 이용한 로그 출력 설정

아래 패키지 폴더에 logback-spring.xml 파일을 만들어서 아래 코드를 넣습니다.

logback-spring.xml 코드

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <include resource="org/springframework/boot/logging/logback/defaults.xml" />
   <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <layout class="ch.qos.logback.classic.PatternLayout">
         <pattern>%d{HH:mm:ss} [%-5level] \(%F:%L\) %message%n</pattern>
      </layout>
   </appender>

   <root level="INFO">
      <appender-ref ref="STDOUT" />
   </root>
</configuration>

build.gradle dependency 추가

build.gradle 추가 내용

implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'

Application Main에 Servelet관련 Class 상속

package com.study.studyTwo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class StudyTwoApplication extends SpringBootServletInitializer {

   public static void main(String[] args) {
      SpringApplication.run(StudyTwoApplication.class, args);
   }

}

 

로그 출력 정상적으로 되는지 확인 하기 위하여 로그 출력 추가 

package com.study.studyTwo.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Api(tags={"메인화면 API"})
@Slf4j
public class StudyController {

    @GetMapping("/study")
    @ApiOperation(value="Study 하자")
    public String helloWorld() {
        log.info("로그 테스트중입니다.");
        return "Hello World Study";
    }

//    @RequestMapping("/")
//    public String helloWorldMain() {
//        return "hello World Main";
//    }
}

Spring Boot에 로그가 출력된 모습

"로그 테스트중입니다." 라는 로그가 정상적으로 출력 되었습니다.

다음 예제는 위 기능에 추가로 GET/POST로 넘어온 값들을 출력하는 기능을 넣어 보겠습니다.
Git계정을 만들어서 지금까지 작성된 예제도 공유해 보겠습니다.

Comments