package com.dsh.other.audit;
|
|
import com.dsh.other.entity.SysAccountAuditLog;
|
import com.dsh.other.service.SysAccountAuditLogService;
|
import feign.Logger;
|
import feign.Request;
|
import org.slf4j.LoggerFactory;
|
|
import java.util.UUID;
|
|
/** 将本服务发起的 Feign 调用同步写入统一审计表,不记录请求正文。 */
|
public class FeignAuditLogger extends Logger {
|
private final org.slf4j.Logger logger = LoggerFactory.getLogger(FeignAuditLogger.class);
|
private final SysAccountAuditLogService auditLogService;
|
|
/**
|
* 构造 Feign 审计日志器。
|
*
|
* @param auditLogService 审计日志服务
|
*/
|
public FeignAuditLogger(SysAccountAuditLogService auditLogService) {
|
this.auditLogService = auditLogService;
|
}
|
|
@Override protected void log(String configKey, String format, Object... args) { logger.debug(methodTag(configKey) + format, args); }
|
@Override protected void logRequest(String configKey, Level logLevel, Request request) {
|
try {
|
SysAccountAuditLog auditLog = new SysAccountAuditLog();
|
auditLog.setTraceId(UUID.randomUUID().toString().replace("-", ""));
|
auditLog.setSourceService("mb-cloud-other");
|
auditLog.setSourceType("FEIGN");
|
auditLog.setOperationType("FEIGN_CALL");
|
auditLog.setRiskLevel(AuditLogSupport.riskLevel(request.url(), "FEIGN_CALL"));
|
auditLog.setOperationName(configKey);
|
auditLog.setRequestMethod(request.httpMethod().name());
|
auditLog.setRequestUri(request.url());
|
auditLog.setRequestParams(request.body() == null ? null : "bodyBytes=" + request.body().length + ", contentType=" + request.headers().get("Content-Type"));
|
auditLogService.append(auditLog);
|
} catch (Exception e) { logger.error("Feign审计日志写入失败, configKey={}", configKey, e); }
|
super.logRequest(configKey, logLevel, request);
|
}
|
}
|