본문 바로가기
코딩/Spring Boot

Spring Boot Log4j2 셋업

by skyoon 2025. 1. 15.

Git Code 버전 : 0.0.4-SNAPSHOT

  Spring Boot에 Log4j2를 셋업 하는 방법이다. 개발 및 아니라 운영 중 Error 상황에서도 Log를 남겨둬야 디버깅이 가능함은 굳이 설명할 필요가 없다. Java 로거 중 가장 많이 사용하는 것 중 하나인 Log4j2를 로거로 사용하겠다. 

build.grade의 dependencies에 아래와 같이 라이브러리를 추가하는데 Spring Boot에 기본 포함된 log lib대신 사용 할 것이라 아래와 같이 replace 하는 구문을 넣어준다.

implementation 'org.springframework.boot:spring-boot-starter-log4j2'

modules {
	module("org.springframework.boot:spring-boot-starter-logging") {
		replacedBy("org.springframework.boot:spring-boot-starter-log4j2")
	}
}

 

  Spring Logger 대신 Log4j2를 사용하는 것이므로 applicaiton.yml의 설정을 다음과 같이 해준다(들여쓰기 조심)

spring:
    application:
        name: stock
        { 중략 }
        
# logging은 앞에 공백없이 첫번째 indentation임
logging:
    config: classpath:/log4j2/log4j2.xml
    level:
        org:
            hibernate:
                sql: error

 

  config 설정을 정리한 log4j2 src/resources/log4j2에 저장한다.(resources 폴더 아래 log4j2 폴더를 미리 생성해둬야 함)

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
   <Properties>
       <Property name="LOG_PATH">logs</Property>
       <Property name="DEFAULT_PATTERN">[%d{yyyy-MM-dd HH:mm:ss.SSS}] %5p ${sys:PID} --- [%15.15t] %-40.40c{1.} : %m%n%xwEx</Property>
       <Property name="COLOR_PATTERN">[%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint}] %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
       <Property name="TEST_PATTERN">%d %5p [%c] %m%n</Property>
   </Properties>

   <Appenders>
       <Console name="console" target="SYSTEM_OUT" follow="true">
           <PatternLayout pattern="${COLOR_PATTERN}"/>
       </Console>

       <RollingFile name="RollingFileAppender">
           <FileName>${LOG_PATH}/log4j2.log</FileName>
           <FilePattern>${LOG_PATH}/log4j2.%d{yyyy-MM-dd-hh-mm}.%i.log.gz</FilePattern>
           <PatternLayout>
               <Pattern>${DEFAULT_PATTERN}</Pattern>
           </PatternLayout>
           <Policies>
               <SizeBasedTriggeringPolicy size="100MB"/>
               <TimeBasedTriggeringPolicy interval="60" modulate="true"/>
           </Policies>
       </RollingFile>
   </Appenders>

   <Loggers>
       <root level="info" additivity="true">
           <AppenderRef ref="console"/>
           <AppenderRef ref="RollingFileAppender"/>
       </root>
       <Logger name="consolelog" level="info" additivity="false">
           <AppenderRef ref="RollingFileAppender"/>
       </Logger>
   </Loggers>
</Configuration>

  log4j2가 정상적으로 수행되는지 확인하기 위해 ConfigController의 conf 페이지 출력 method에 아래와 같이 추가해 준다.

List<Config> configInfos = configService.getAllConfig();

// Log 출력 코드
configInfos.forEach(config -> {
    log.info("id : {}, key : {}, value : {}, category : {}, comment : {}",
            config.getId(), config.getConfName(), config.getConfValue(), config.getCategory(),
            config.getComment());
});

model.addAttribute("confs", configInfos);

  아래 표와 같이 데이터 data.go.kr 연동을 위한 정보를 설정한다. data.go.kr에서 데이터를 가져올 때는 호출할 API의 URL과 인증키가 필요하다. Category는 특정 API를 호출할 때 사용할 파라미터 그룹을 지정한 ID로 STOCK_INFO는 주식시세정보를 가져울 때 필요한 데이터 묶음을 위해 지정한 값이다. Name은 읽은 값에서 실제 데이터를 얻기 위해 지정한 Key이다. Value는 key에 해당하는 실제 Data이다. (관련 정보 사용은 data.go.kr 연동에 자세히 설명),

Name Value Category Comment
AUTH_KEY data.go.kr에서 발급받은 decoding key STOCK_INFO 사용자 임의
CALLBACK_URL https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService STOCK_INFO End Point
AUTH_KEY data.go.kr에서 발급받은 decoding key ISIN_CODE 사용자 임의
CALLBACK_URL https://apis.data.go.kr/1160100/service/GetKrxListedInfoService ISIN_CODE End Point

  data.go.kr에서 데이터를 가져오기 위한 정보를 conf UI page를 통해 입력하고 조회하면 아래와 같이 출력이 된다.