|
|
|
@ -1,13 +1,25 @@
|
|
|
|
package com.bsmlab.dfx.agent.config;
|
|
|
|
package com.bsmlab.dfx.agent.config;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import ch.qos.logback.classic.Level;
|
|
|
|
|
|
|
|
import ch.qos.logback.classic.Logger;
|
|
|
|
|
|
|
|
import ch.qos.logback.classic.LoggerContext;
|
|
|
|
|
|
|
|
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
|
|
|
|
|
|
|
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
|
|
|
|
|
|
|
import ch.qos.logback.core.rolling.RollingFileAppender;
|
|
|
|
|
|
|
|
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService;
|
|
|
|
import com.bsmlab.dfx.agent.config.datasource.DynamicDataSourceService;
|
|
|
|
import com.bsmlab.dfx.agent.task.dropbox.DropBoxTaskExecutorService;
|
|
|
|
import com.bsmlab.dfx.agent.task.dropbox.DropBoxTaskExecutorService;
|
|
|
|
import com.bsmlab.dfx.agent.task.postman.PostmanSchedulerService;
|
|
|
|
import com.bsmlab.dfx.agent.task.postman.PostmanSchedulerService;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.SmartInitializingSingleton;
|
|
|
|
import org.springframework.beans.factory.SmartInitializingSingleton;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
@Slf4j
|
|
|
|
@Component
|
|
|
|
@Component
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
@ -16,24 +28,54 @@ public class BeanInitializer implements SmartInitializingSingleton {
|
|
|
|
private final DynamicDataSourceService dynamicDataSourceService;
|
|
|
|
private final DynamicDataSourceService dynamicDataSourceService;
|
|
|
|
private final PostmanSchedulerService postmanSchedulerService;
|
|
|
|
private final PostmanSchedulerService postmanSchedulerService;
|
|
|
|
private final DropBoxTaskExecutorService dropBoxTaskExecutorService;
|
|
|
|
private final DropBoxTaskExecutorService dropBoxTaskExecutorService;
|
|
|
|
|
|
|
|
private final AgentConfigReader agentConfigReader;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void afterSingletonsInstantiated() {
|
|
|
|
public void afterSingletonsInstantiated() {
|
|
|
|
System.out.println("🔥 BeanInitializer afterSingletonsInstantiated() 진입!");
|
|
|
|
System.out.println("🔥 BeanInitializer afterSingletonsInstantiated() 진입!");
|
|
|
|
log.info("✅ BeanInitializer 작동 확인");
|
|
|
|
log.info("✅ BeanInitializer 작동 확인");
|
|
|
|
/*
|
|
|
|
this.configureLogback();
|
|
|
|
// DfxAgentConfiguration 에서 생성한 빈 중 DataSource 관련 설정을 마무리한다.
|
|
|
|
}
|
|
|
|
dynamicDataSourceService.setSqlSessionFactoryMap(dfxAgentConfiguration.getTemporarySqlSessionFactoryMap());
|
|
|
|
|
|
|
|
dynamicDataSourceService.setTransactionManagerMap(dfxAgentConfiguration.getTemporaryTransactionManagerMap());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// PostmanSchedulerService, DropBoxTaskExecutorService 는 @RequiredArgsConstructor 이기 때문에 자동으로 injection 된다
|
|
|
|
|
|
|
|
// 그 후 @PostConstruct 로직이 실행될 것이다.
|
|
|
|
|
|
|
|
log.debug("BeanInitializer afterSingletonsInstantiated [run]");
|
|
|
|
|
|
|
|
log.debug("{} ready", postmanSchedulerService.getClass().getName());
|
|
|
|
|
|
|
|
log.debug("{} ready", dropBoxTaskExecutorService.getClass().getName());
|
|
|
|
|
|
|
|
//TODO 4. Worker 쓰레드 생성
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void configureLogback() {
|
|
|
|
|
|
|
|
AgentConfigDto agentConfigDto = this.agentConfigReader.getAgentConfigDto();
|
|
|
|
|
|
|
|
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
|
|
|
|
|
|
|
|
RollingFileAppender<ILoggingEvent> appender = new RollingFileAppender<>();
|
|
|
|
|
|
|
|
appender.setContext(loggerContext);
|
|
|
|
|
|
|
|
appender.setName(agentConfigDto.getLogging().getLogName());
|
|
|
|
|
|
|
|
String logFilePath = Paths.get(agentConfigDto.getLogging().getLogDirectory(), agentConfigDto.getLogging().getLogFileName()).toString();
|
|
|
|
|
|
|
|
appender.setFile(logFilePath);
|
|
|
|
|
|
|
|
TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<>();
|
|
|
|
|
|
|
|
rollingPolicy.setContext(loggerContext);
|
|
|
|
|
|
|
|
rollingPolicy.setParent(appender);
|
|
|
|
|
|
|
|
rollingPolicy.setFileNamePattern(logFilePath + ".%d{yyyy-MM-dd}.gz");
|
|
|
|
|
|
|
|
rollingPolicy.setMaxHistory(agentConfigDto.getLogging().getMaxHistory());
|
|
|
|
|
|
|
|
rollingPolicy.setCleanHistoryOnStart(true);
|
|
|
|
|
|
|
|
rollingPolicy.start();
|
|
|
|
|
|
|
|
PatternLayoutEncoder encoder = new PatternLayoutEncoder();
|
|
|
|
|
|
|
|
encoder.setContext(loggerContext);
|
|
|
|
|
|
|
|
encoder.setPattern(agentConfigDto.getLogging().getLogPattern());
|
|
|
|
|
|
|
|
encoder.start();
|
|
|
|
|
|
|
|
appender.setEncoder(encoder);
|
|
|
|
|
|
|
|
appender.setRollingPolicy(rollingPolicy);
|
|
|
|
|
|
|
|
appender.start();
|
|
|
|
|
|
|
|
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
|
|
|
|
|
|
|
|
Level logLevel = Level.toLevel(agentConfigDto.getLogging().getRootLogLevel());
|
|
|
|
|
|
|
|
rootLogger.setLevel(logLevel);
|
|
|
|
|
|
|
|
rootLogger.detachAndStopAllAppenders();
|
|
|
|
|
|
|
|
rootLogger.addAppender(appender);
|
|
|
|
|
|
|
|
List<Map<String, String>> packagesListMap = agentConfigDto.getLogging().getPackages();
|
|
|
|
|
|
|
|
if(packagesListMap != null) {
|
|
|
|
|
|
|
|
for(Map<String, String> packagesMap : packagesListMap) {
|
|
|
|
|
|
|
|
for(String packageName : packagesMap.keySet()) {
|
|
|
|
|
|
|
|
Level packageLogLevel = Level.toLevel(packagesMap.get(packageName));
|
|
|
|
|
|
|
|
Logger logger = loggerContext.getLogger(packageName);
|
|
|
|
|
|
|
|
logger.setLevel(packageLogLevel);
|
|
|
|
|
|
|
|
logger.setAdditive(false); // 부모 로그 방지
|
|
|
|
|
|
|
|
logger.detachAndStopAllAppenders();
|
|
|
|
|
|
|
|
logger.addAppender(appender);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|