개발 이야기/backend

스프링부트 미니 프로젝트 만들기 - lombok, log4j2 설치

thisisamrd 2023. 10. 9.

한번 날리고 다시 쓰는 포스트.

힘이 없다......

 

무튼 나는 이제 gradle로 개발하려고 한다.

 

framework |  springboot 
build tool |  gradle
ide |  STS

 

 

 

 

스프링부트 초보의 미니 프로젝트 만들기

 

 

lombok 설치하기 

 

기존 포스트에서 나는 스프링부트  설치할 때 dependency에 롬복도 설치를  해놔서 추가로 뭘 할게 없다.

그러나 혹시라도 모르는 분들을 위해 기록을 해볼까 함.

 

1. build.gradle 

 

 

2. dependencies에 아래 항목 추가 

 

dependencies {
	// ...
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
}

 

 

3. build.gradle 우클릭 -> gradle -> refresh gradle project 

 

 

 

 

 

 

 

 

log4j2 설치하기

1. build.gradle 로 간다

 

 

 

2. configurations에 아래 내용 추가하자.

기존 모듈의 로깅이랑 지금 우리가 설치하려는 log4j2가 겹치면서 충돌이 날 수 있어서 기존 모듈을 제외시키려고 하는 것.

configurations {
	// ..
	  all { /*logback 의존성 추가하고 충돌을 방지 위해*/
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

 

 

 

3. dependencies에 아래 항목 추가

dependencies {
	//...
	implementation 'org.springframework.boot:spring-boot-starter-log4j2'

}

 

 

 

4. build.gradle 우클릭 -> gradle -> refresh gradle project

 

일단 이렇게 해서 설치는 완료한 것임.

 

 

 

5. src/main/resources에 log4j2.xml 파일 생성.

여기서 우리는 log4j2에 대한 설정을 할 예정이다.

 

 

 

6. log4j2.xml에 이렇게 쓴다.

각각의 의미에 대해서는 주석 달아놓음.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration debug="true" scan="true"
	scanPeriod="60 seconds">

	<!--변수 설정 -->
	<Properties>
		<Property name="LOG_PATH" value="logs"></Property>  <!--로그 파일 경로 -->
		<Property name="LOG_FORMAT" value="[%date{yyyy-MM-dd HH:mm:ss}][%level][%file:%line] %msg%n" /> <!--로그 출력 형태 -->

	</Properties>

	<Appenders>
		<!-- 콘솔 로그 -->
		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout pattern="${LOG_FORMAT}" />
			<charset>UTF-8</charset>
		</Console>

		<!-- 로그 파일 -->
		<RollingFile name="file"
			fileName="${LOG_PATH}/chatbot.log" append="true" filePattern="${LOG_PATH}/chatbot.%d{yyyy-MM-dd}-%i.log">
			<PatternLayout pattern="${LOG_FORMAT}" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- 파일 로그 생성 간격 -->
				<SizeBasedTriggeringPolicy size="50MB" />
			</Policies>
			<DefaultRolloverStrategy>
			<!-- 지울 Depth. 파일만 지울 땐 1을 넣어준다 -->
                <Delete basePath="logs" maxDepth="1">
                <!-- exceeds 값을 넘을 시 파일이 제거  -->
                    <IfAccumulatedFileCount exceeds="10"/>
                </Delete>
            </DefaultRolloverStrategy>
		</RollingFile>
	</Appenders>

	<Loggers>
		<!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE -->
		<Root level="info">
			<AppenderRef ref="console" />
			 <AppenderRef ref="file" /> 
		</Root>

		<!-- 패키지별 log level -->
		<logger name="org.springframework" level="info" additivity="false">
			<AppenderRef ref="console" />
			<AppenderRef ref="file" />
		</logger>

	</Loggers>
</Configuration>

 

 

 

7. src/main/java/miniproject/HelloController.java 로 간다.

그리고 이전 포스트에서 hello world 찍어보려고 만들어둔 HelloController에서 log4j2 잘 나오는지 확인해 볼 예정이다. 

 

 

 

 

8. 아래처럼 쓴다. 참고로 import 자동으로 하고싶으면 ctrl+shift+o 하면 된다.

나는 초보라서 이런거 하나하나를 기록해둬야 한다..

package miniproject;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.log4j.Log4j2;

@Log4j2
@RestController
public class HelloController {
	@RequestMapping("/console")
	public static void main(String[] args) {
		System.out.println("helloWorld");
	}

	@RequestMapping("/web")
	public String reHello() {
		return "helloword";
	}

	@GetMapping(value = "/log")
	public void log() throws Exception {
		// FATAL, ERROR, WARN, INFO, DEBUG, TRACE
		log.trace("Hi I'm {} log", "TRACE");
		log.debug("Hi I'm {} log", "DEBUG");
		log.info("Hi I'm {} log", "INFO");
		log.warn("Hi I'm {} log", "WARN");
		log.error("Hi I'm {} log", "ERROR");
	}

}

 

위 내용을 보면 @GetMapping(value = "/log") 이라고 되어있으므로

주소창에 localhost:8080/log 를 찍고 들어가면 콘솔창에 "Hi I'm 어쩌구 log "라고 뜰 것이다.

그런데 나는 xml파일에서 root level을 info로 지정해놨기 때문에 trace랑 debug레벨은 콘솔에 안뜰것이다.

잘 나오는지 확인해보자.

 

 

 

9. 서버 구동하고 http://localhost:8080/log 쳐서 들어가보기.

와~~ 잘 뜬다!!

 

 

오늘 배운 것을 정리해보면...

코드고 롬복이고 다 떠나서

수정버튼 누를때 본인이 수정버튼 누르고있는지 삭제버튼 누르고있는지 반드시 확인을 해봐야 한다는 것을 알았다..

댓글