Files
elink-online-common/src/main/java/com/eactive/eai/common/util/HttpAdapterExtraLogUtil.java
T
2025-12-05 09:24:42 +09:00

115 lines
6.7 KiB
Java

package com.eactive.eai.common.util;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.eactive.eai.common.logger.HttpAdapterExtraHeaderVo;
import com.eactive.eai.common.logger.HttpAdapterExtraLogVo;
import com.eactive.eai.common.logger.HttpLoggingService;
import com.eactive.eai.common.logger.async.AsyncHttpLoggingPoolManager;
import com.eactive.eai.env.ElinkConfig;
import org.apache.hc.core5.http.Header;
import org.apache.commons.lang3.StringUtils;
public class HttpAdapterExtraLogUtil {
static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Map<Object, Object> headers, String url, String httpMethod){
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headers, url, httpMethod, 0);
}
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Map<Object, Object> headers, String url, String httpMethod, int httpStatus){
List<HttpAdapterExtraHeaderVo> headerVoList = convertMapToListOfHttpAdapterExtraHeaderVo(headers);
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headerVoList, url, httpMethod, httpStatus);
}
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Header[] headers, String url, String httpMethod){
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headers, url, httpMethod, 0);
}
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, Header[] headers, String url, String httpMethod, int httpStatus){
List<HttpAdapterExtraHeaderVo> headerVoList = convertHeaderToListOfHttpAdapterExtraHeaderVo(headers);
insertHttpAdapterExtraLog(guid, serviceProcessNumber, adapterGroupName, adapterName, headerVoList, url, httpMethod, httpStatus);
}
public static void insertHttpAdapterExtraLog(String guid, int serviceProcessNumber, String adapterGroupName, String adapterName, List<HttpAdapterExtraHeaderVo> headerVoList, String url, String httpMethod, int httpStatus){
try {
// HttpAdapterExtraLogMapper mapper = ApplicationContextProvider.getContext().getBean(HttpAdapterExtraLogMapper.class);
HttpAdapterExtraLogVo httpAdapterExtraLogVo = new HttpAdapterExtraLogVo();
httpAdapterExtraLogVo.setGuid(guid);
httpAdapterExtraLogVo.setServiceProcessNumber(serviceProcessNumber);
httpAdapterExtraLogVo.setAdapterGroupName(adapterGroupName);
httpAdapterExtraLogVo.setAdapterName(adapterName);
httpAdapterExtraLogVo.setUrl(url);
httpAdapterExtraLogVo.setHttpMethod(httpMethod);
for (HttpAdapterExtraHeaderVo httpAdapterExtraHeaderVo : headerVoList) {
String name = httpAdapterExtraHeaderVo.getName();
if(StringUtils.isNotBlank(name) && "authorization".equals(name.toLowerCase())) {
httpAdapterExtraHeaderVo.setValue("{hidden}");
}
String value = httpAdapterExtraHeaderVo.getValue();
if(StringUtils.isNotBlank(value) && value.length() > 400) {
value = value.substring(0, 400) + "...";
httpAdapterExtraHeaderVo.setValue(value);
}else if(value == null){
httpAdapterExtraHeaderVo.setValue(" ");
}
}
httpAdapterExtraLogVo.setHeaderList(headerVoList);
httpAdapterExtraLogVo.setHttpStatus(httpStatus);
if(ElinkConfig.isUseAsyncLogging()) {
AsyncHttpLoggingPoolManager.getInstance().publish(httpAdapterExtraLogVo);
} else {
HttpLoggingService service = ApplicationContextProvider.getContext().getBean(HttpLoggingService.class);
service.insertHttpAdapterExtraLog(httpAdapterExtraLogVo);
}
// 2025.04.30 DB Log 작업 Async 처리 적용으로 수정
// if (EAIDBLogControl.isEnable()) {
// // 2025.04.11 DB 장애시 DB 장애 Flag 설정하도록 수정
// try {
// HttpAdapterExtraLog httpAdapterExtraLog = mapper.toEntity(httpAdapterExtraLogVo);
// HttpAdapterExtraLogLogger service = ApplicationContextProvider.getContext().getBean(HttpAdapterExtraLogLogger.class);
// service.save(httpAdapterExtraLog);
// } catch (Exception e) {
// logger.error("["+guid+"] Insert HTTP Log Error. - " + e.getMessage(), e);
// // DB Connection Error일 경우에만 설정하도록 수정
// String message = e.getMessage();
// // 오류 메시지 추가 - Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
// // 오류 메시지 추가 - Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
// if( "ConnectionError".equals(message) || org.apache.commons.lang.StringUtils.contains(message, "JDBCConnectionException")
// || org.apache.commons.lang.StringUtils.contains(message, "Unable to acquire JDBC Connection") ) {
// EAIDBLogControl.setEnable(false);
// }
//// throw e;
// }
// } else {
// // TODO: 파일 로그 및 복구 처리 추가 필요
// }
} catch(Throwable th){
logger.error("["+guid+"] Insert HTTP Log Error. - " + th.getMessage(), th);
}
}
public static List<HttpAdapterExtraHeaderVo> convertHeaderToListOfHttpAdapterExtraHeaderVo(Header[] headers) {
Set<String> seenNames = new HashSet<>();
return Arrays.stream(headers)
// .filter(header -> seenNames.add(header.getName())) // 중복된 이름을 스킵
.map(header -> new HttpAdapterExtraHeaderVo(header.getName(), header.getValue()))
.collect(Collectors.toList());
}
public static List<HttpAdapterExtraHeaderVo> convertMapToListOfHttpAdapterExtraHeaderVo(Map<Object, Object> map) {
return map.entrySet().stream()
.map(entry -> new HttpAdapterExtraHeaderVo(entry.getKey().toString(), entry.getValue().toString()))
.collect(Collectors.toList());
}
}