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를 통해 입력하고 조회하면 아래와 같이 출력이 된다.