feat: 3.2.0
优化服务端日志
This commit is contained in:
parent
96b0923043
commit
80fa6df96a
@ -0,0 +1,17 @@
|
||||
package com.aizuda.easy.retry.server.common;
|
||||
|
||||
import com.aizuda.easy.retry.common.log.dto.LogContentDTO;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
|
||||
/**
|
||||
* @author: xiaowoniu
|
||||
* @date : 2024-03-22
|
||||
* @since : 3.2.0
|
||||
*/
|
||||
public interface LogStorage {
|
||||
|
||||
LogTypeEnum logType();
|
||||
|
||||
void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO);
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.support.appender;
|
||||
package com.aizuda.easy.retry.server.common.appender;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import ch.qos.logback.classic.spi.IThrowableProxy;
|
||||
import ch.qos.logback.classic.spi.LoggingEvent;
|
||||
import ch.qos.logback.classic.spi.StackTraceElementProxy;
|
||||
@ -12,24 +11,20 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.common.log.constant.LogFieldConstants;
|
||||
import com.aizuda.easy.retry.common.log.dto.LogContentDTO;
|
||||
import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.aizuda.easy.retry.server.common.LogStorage;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.common.log.LogStorageFactory;
|
||||
import org.slf4j.MDC;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @author wodeyangzipingpingwuqi
|
||||
* @date 2023-12-27
|
||||
* @since 3.2.0
|
||||
* @since 2.6.0
|
||||
*/
|
||||
public class EasyRetryServerLogbackAppender<E> extends UnsynchronizedAppenderBase<E> {
|
||||
|
||||
@ -90,18 +85,11 @@ public class EasyRetryServerLogbackAppender<E> extends UnsynchronizedAppenderBas
|
||||
* @param logMetaDTO 日志元数据
|
||||
*/
|
||||
private void saveLog(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) {
|
||||
RetryTaskLogDTO jobLogDTO = new RetryTaskLogDTO();
|
||||
Map<String, String> messageMap = logContentDTO.getFieldList()
|
||||
.stream()
|
||||
.filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue()))
|
||||
.collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue));
|
||||
jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap)));
|
||||
jobLogDTO.setGroupName(logMetaDTO.getGroupName());
|
||||
jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId());
|
||||
jobLogDTO.setUniqueId(logMetaDTO.getUniqueId());
|
||||
jobLogDTO.setRealTime(logMetaDTO.getTimestamp());
|
||||
ActorRef actorRef = ActorGenerator.jobLogActor();
|
||||
actorRef.tell(jobLogDTO, actorRef);
|
||||
|
||||
LogStorage logStorage = LogStorageFactory.get(logMetaDTO.getLogType());
|
||||
if (Objects.nonNull(logStorage)) {
|
||||
logStorage.storage(logContentDTO, logMetaDTO);
|
||||
}
|
||||
}
|
||||
|
||||
private String getThrowableField(LoggingEvent event) {
|
@ -1,7 +1,7 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.dto;
|
||||
package com.aizuda.easy.retry.server.common.dto;
|
||||
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import lombok.Builder;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
@ -10,7 +10,6 @@ import lombok.Data;
|
||||
* @since 3.2.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
public class LogMetaDTO {
|
||||
|
||||
/**
|
||||
@ -23,18 +22,13 @@ public class LogMetaDTO {
|
||||
*/
|
||||
private String groupName;
|
||||
|
||||
/**
|
||||
* 组名称
|
||||
*/
|
||||
private String uniqueId;
|
||||
|
||||
/**
|
||||
* 时间
|
||||
*/
|
||||
private Long timestamp;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonUtil.toJsonString(this);
|
||||
}
|
||||
/**
|
||||
* 日志类型
|
||||
*/
|
||||
private LogTypeEnum logType;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.aizuda.easy.retry.server.common.log;
|
||||
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.LogStorage;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: xiaowoniu
|
||||
* @date : 2024-03-22
|
||||
* @since : 3.2.0
|
||||
*/
|
||||
public final class LogStorageFactory {
|
||||
|
||||
private static final Map<LogTypeEnum, LogStorage> LOG_STORAGE = new HashMap<>();
|
||||
|
||||
public static void register(LogTypeEnum logType, LogStorage logStorage) {
|
||||
LOG_STORAGE.put(logType, logStorage);
|
||||
}
|
||||
|
||||
public static LogStorage get(LogTypeEnum logType) {
|
||||
return LOG_STORAGE.get(logType);
|
||||
}
|
||||
}
|
@ -1,25 +1,23 @@
|
||||
package com.aizuda.easy.retry.server.job.task.dto;
|
||||
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @date 2024-01-10 22:56:33
|
||||
* @since 2.6.0
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class LogMetaDTO {
|
||||
public class JobLogMetaDTO extends LogMetaDTO {
|
||||
|
||||
/**
|
||||
* 命名空间
|
||||
*/
|
||||
private String namespaceId;
|
||||
|
||||
/**
|
||||
* 组名称
|
||||
*/
|
||||
private String groupName;
|
||||
public JobLogMetaDTO () {
|
||||
setLogType(LogTypeEnum.JOB);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务信息id
|
||||
@ -36,10 +34,6 @@ public class LogMetaDTO {
|
||||
*/
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 时间
|
||||
*/
|
||||
private Long timestamp;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
@ -2,6 +2,7 @@ package com.aizuda.easy.retry.server.job.task.support;
|
||||
|
||||
import com.aizuda.easy.retry.client.model.request.DispatchJobRequest;
|
||||
import com.aizuda.easy.retry.client.model.request.DispatchJobResultRequest;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.*;
|
||||
import com.aizuda.easy.retry.server.job.task.support.block.job.BlockStrategyContext;
|
||||
import com.aizuda.easy.retry.server.job.task.support.executor.workflow.WorkflowExecutorContext;
|
||||
@ -77,7 +78,7 @@ public interface JobTaskConverter {
|
||||
|
||||
JobLogMessage toJobLogMessage(LogTaskDTO logTaskDTO);
|
||||
|
||||
LogMetaDTO toJobLogDTO(BaseDTO baseDTO);
|
||||
JobLogMetaDTO toJobLogDTO(BaseDTO baseDTO);
|
||||
|
||||
ClientCallbackContext toClientCallbackContext(DispatchJobResultRequest request);
|
||||
|
||||
|
@ -1,141 +0,0 @@
|
||||
package com.aizuda.easy.retry.server.job.task.support.appender;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import ch.qos.logback.classic.spi.IThrowableProxy;
|
||||
import ch.qos.logback.classic.spi.LoggingEvent;
|
||||
import ch.qos.logback.classic.spi.StackTraceElementProxy;
|
||||
import ch.qos.logback.classic.spi.ThrowableProxyUtil;
|
||||
import ch.qos.logback.core.CoreConstants;
|
||||
import ch.qos.logback.core.UnsynchronizedAppenderBase;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.aizuda.easy.retry.common.log.constant.LogFieldConstants;
|
||||
import com.aizuda.easy.retry.common.log.dto.LogContentDTO;
|
||||
import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO;
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.slf4j.MDC;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author wodeyangzipingpingwuqi
|
||||
* @date 2023-12-27
|
||||
* @since 2.6.0
|
||||
*/
|
||||
public class EasyRetryServerLogbackAppender<E> extends UnsynchronizedAppenderBase<E> {
|
||||
|
||||
@Override
|
||||
protected void append(E eventObject) {
|
||||
|
||||
// Not job context
|
||||
if (!(eventObject instanceof LoggingEvent) || Objects.isNull(
|
||||
MDC.getMDCAdapter().get(LogFieldConstants.MDC_REMOTE))) {
|
||||
return;
|
||||
}
|
||||
|
||||
MDC.getMDCAdapter().remove(LogFieldConstants.MDC_REMOTE);
|
||||
// Prepare processing
|
||||
((LoggingEvent) eventObject).prepareForDeferredProcessing();
|
||||
LoggingEvent event = (LoggingEvent) eventObject;
|
||||
|
||||
LogContentDTO logContentDTO = new LogContentDTO();
|
||||
logContentDTO.addLevelField(event.getLevel().levelStr);
|
||||
logContentDTO.addThreadField(event.getThreadName());
|
||||
logContentDTO.addLocationField(getLocationField(event));
|
||||
logContentDTO.addThrowableField(getThrowableField(event));
|
||||
|
||||
LogMetaDTO logMetaDTO = null;
|
||||
try {
|
||||
String patternString = "<\\|>(.*?)<\\|>";
|
||||
Pattern pattern = Pattern.compile(patternString);
|
||||
Matcher matcher = pattern.matcher(event.getFormattedMessage());
|
||||
while (matcher.find()) {
|
||||
String extractedData = matcher.group(1);
|
||||
if (StrUtil.isBlank(extractedData)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
logMetaDTO = JsonUtil.parseObject(extractedData, LogMetaDTO.class);
|
||||
String message = event.getFormattedMessage().replaceFirst(patternString, StrUtil.EMPTY);
|
||||
logContentDTO.addMessageField(message);
|
||||
logContentDTO.addTimeStamp(Optional.ofNullable(logMetaDTO.getTimestamp()).orElse(event.getTimeStamp()));
|
||||
break;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
EasyRetryLog.LOCAL.error("日志解析失败. msg:[{}]", event.getFormattedMessage(), e);
|
||||
}
|
||||
|
||||
if (Objects.isNull(logMetaDTO)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 保存执行的日志
|
||||
saveLog(logContentDTO, logMetaDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存日志
|
||||
*
|
||||
* @param logContentDTO 日志内容
|
||||
* @param logMetaDTO 日志元数据
|
||||
*/
|
||||
private void saveLog(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) {
|
||||
JobLogDTO jobLogDTO = new JobLogDTO();
|
||||
Map<String, String> messageMap = logContentDTO.getFieldList()
|
||||
.stream()
|
||||
.filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue()))
|
||||
.collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue));
|
||||
jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap)));
|
||||
jobLogDTO.setTaskId(logMetaDTO.getTaskId());
|
||||
jobLogDTO.setJobId(logMetaDTO.getJobId());
|
||||
jobLogDTO.setGroupName(logMetaDTO.getGroupName());
|
||||
jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId());
|
||||
jobLogDTO.setTaskBatchId(logMetaDTO.getTaskBatchId());
|
||||
jobLogDTO.setRealTime(logContentDTO.getTimeStamp());
|
||||
ActorRef actorRef = ActorGenerator.jobLogActor();
|
||||
actorRef.tell(jobLogDTO, actorRef);
|
||||
}
|
||||
|
||||
private String getThrowableField(LoggingEvent event) {
|
||||
IThrowableProxy iThrowableProxy = event.getThrowableProxy();
|
||||
if (iThrowableProxy != null) {
|
||||
String throwable = getExceptionInfo(iThrowableProxy);
|
||||
throwable += formatThrowable(event.getThrowableProxy().getStackTraceElementProxyArray());
|
||||
return throwable;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getLocationField(LoggingEvent event) {
|
||||
StackTraceElement[] caller = event.getCallerData();
|
||||
if (caller != null && caller.length > 0) {
|
||||
return caller[0].toString();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String formatThrowable(StackTraceElementProxy[] stackTraceElementProxyArray) {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (StackTraceElementProxy step : stackTraceElementProxyArray) {
|
||||
builder.append(CoreConstants.LINE_SEPARATOR);
|
||||
String string = step.toString();
|
||||
builder.append(CoreConstants.TAB).append(string);
|
||||
ThrowableProxyUtil.subjoinPackagingData(builder, step);
|
||||
}
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private String getExceptionInfo(IThrowableProxy iThrowableProxy) {
|
||||
String s = iThrowableProxy.getClassName();
|
||||
String message = iThrowableProxy.getMessage();
|
||||
return (message != null) ? (s + ": " + message) : s;
|
||||
}
|
||||
}
|
@ -3,10 +3,8 @@ package com.aizuda.easy.retry.server.job.task.support.callback;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.util.ClientInfoUtils;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.enums.JobRetrySceneEnum;
|
||||
import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler;
|
||||
@ -16,7 +14,6 @@ import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMappe
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -1,31 +1,18 @@
|
||||
package com.aizuda.easy.retry.server.job.task.support.callback;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable;
|
||||
import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo;
|
||||
import com.aizuda.easy.retry.server.common.handler.ClientNodeAllocateHandler;
|
||||
import com.aizuda.easy.retry.server.common.util.ClientInfoUtils;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.Job;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author www.byteblogs.com
|
||||
|
@ -1,22 +1,16 @@
|
||||
package com.aizuda.easy.retry.server.job.task.support.dispatch;
|
||||
|
||||
import akka.actor.AbstractActor;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskTypeEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.CompleteJobBatchDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskStopHandler;
|
||||
import com.aizuda.easy.retry.server.job.task.support.LockExecutor;
|
||||
import com.aizuda.easy.retry.server.job.task.support.handler.DistributedLockHandler;
|
||||
import com.aizuda.easy.retry.server.job.task.support.handler.JobTaskBatchHandler;
|
||||
import com.aizuda.easy.retry.server.job.task.support.stop.JobTaskStopFactory;
|
||||
@ -29,13 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
|
@ -4,12 +4,10 @@ import akka.actor.AbstractActor;
|
||||
import akka.actor.ActorRef;
|
||||
import com.aizuda.easy.retry.client.model.ExecuteResult;
|
||||
import com.aizuda.easy.retry.client.model.request.DispatchJobRequest;
|
||||
import com.aizuda.easy.retry.common.core.constant.SystemConstants;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum;
|
||||
import com.aizuda.easy.retry.common.core.enums.StatusEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.common.core.model.Result;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.cache.CacheRegisterTable;
|
||||
import com.aizuda.easy.retry.server.common.client.RequestBuilder;
|
||||
@ -17,8 +15,7 @@ import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.job.task.client.JobRpcClient;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobExecutorResultDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.RealJobExecutorDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.ClientCallbackHandler;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
|
||||
@ -65,13 +62,14 @@ public class RequestClientActor extends AbstractActor {
|
||||
realJobExecutorDTO.getClientId());
|
||||
if (Objects.isNull(registerNodeInfo)) {
|
||||
taskExecuteFailure(realJobExecutorDTO, "客户端不存在");
|
||||
LogMetaDTO logMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO);
|
||||
logMetaDTO.setTimestamp(nowMilli);
|
||||
JobLogMetaDTO jobLogMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO);
|
||||
jobLogMetaDTO.setTimestamp(nowMilli);
|
||||
if (realJobExecutorDTO.isRetry()) {
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试. 失败原因: 无可执行的客户端. 重试次数:[{}]. <|>{}<|>",
|
||||
realJobExecutorDTO.getTaskId(), realJobExecutorDTO.getRetryCount(), logMetaDTO);
|
||||
realJobExecutorDTO.getTaskId(), realJobExecutorDTO.getRetryCount(), jobLogMetaDTO);
|
||||
} else {
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. 失败原因: 无可执行的客户端 <|>{}<|>", realJobExecutorDTO.getTaskId(), logMetaDTO);
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. 失败原因: 无可执行的客户端 <|>{}<|>", realJobExecutorDTO.getTaskId(),
|
||||
jobLogMetaDTO);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -105,13 +103,14 @@ public class RequestClientActor extends AbstractActor {
|
||||
throwable = re.getUndeclaredThrowable();
|
||||
}
|
||||
|
||||
LogMetaDTO logMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO);
|
||||
logMetaDTO.setTimestamp(nowMilli);
|
||||
JobLogMetaDTO jobLogMetaDTO = JobTaskConverter.INSTANCE.toJobLogDTO(realJobExecutorDTO);
|
||||
jobLogMetaDTO.setTimestamp(nowMilli);
|
||||
if (realJobExecutorDTO.isRetry()) {
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试 重试次数:[{}]. <|>{}<|>", logMetaDTO.getTaskId(),
|
||||
realJobExecutorDTO.getRetryCount(), logMetaDTO, throwable);
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试 重试次数:[{}]. <|>{}<|>", jobLogMetaDTO.getTaskId(),
|
||||
realJobExecutorDTO.getRetryCount(), jobLogMetaDTO, throwable);
|
||||
} else {
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", logMetaDTO.getTaskId(), logMetaDTO, throwable);
|
||||
EasyRetryLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", jobLogMetaDTO.getTaskId(),
|
||||
jobLogMetaDTO, throwable);
|
||||
}
|
||||
|
||||
taskExecuteFailure(realJobExecutorDTO, throwable.getMessage());
|
||||
|
@ -12,10 +12,8 @@ import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.client.RequestInterceptor;
|
||||
import com.aizuda.easy.retry.server.common.dto.CallbackConfig;
|
||||
import com.aizuda.easy.retry.server.common.enums.ContentTypeEnum;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter;
|
||||
import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGenerator;
|
||||
import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGeneratorContext;
|
||||
import com.aizuda.easy.retry.server.model.dto.CallbackParamsDTO;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
@ -166,22 +164,22 @@ public class CallbackWorkflowExecutor extends AbstractWorkflowExecutor {
|
||||
|
||||
JobTask jobTask = generateJobTask(context, jobTaskBatch);
|
||||
|
||||
LogMetaDTO logMetaDTO = new LogMetaDTO();
|
||||
logMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
logMetaDTO.setGroupName(context.getGroupName());
|
||||
logMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
logMetaDTO.setJobId(SystemConstants.CALLBACK_JOB_ID);
|
||||
logMetaDTO.setTaskId(jobTask.getId());
|
||||
JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO();
|
||||
jobLogMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
jobLogMetaDTO.setGroupName(context.getGroupName());
|
||||
jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
jobLogMetaDTO.setJobId(SystemConstants.CALLBACK_JOB_ID);
|
||||
jobLogMetaDTO.setTaskId(jobTask.getId());
|
||||
if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus()) {
|
||||
EasyRetryLog.REMOTE.info("节点[{}]回调成功.\n回调参数:{} \n回调结果:[{}] <|>{}<|>",
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), logMetaDTO);
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), jobLogMetaDTO);
|
||||
} else if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.CANCEL.getStatus()) {
|
||||
EasyRetryLog.REMOTE.warn("节点[{}]取消回调. 取消原因: 任务状态已关闭 <|>{}<|>",
|
||||
context.getWorkflowNodeId(), logMetaDTO);
|
||||
context.getWorkflowNodeId(), jobLogMetaDTO);
|
||||
} else {
|
||||
EasyRetryLog.REMOTE.error("节点[{}]回调失败.\n失败原因:{} <|>{}<|>",
|
||||
context.getWorkflowNodeId(),
|
||||
context.getLogMessage(), logMetaDTO);
|
||||
context.getLogMessage(), jobLogMetaDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import com.aizuda.easy.retry.server.common.dto.DecisionConfig;
|
||||
import com.aizuda.easy.retry.server.common.enums.ExpressionTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.enums.LogicalConditionEnum;
|
||||
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.expression.ExpressionInvocationHandler;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
@ -143,19 +143,19 @@ public class DecisionWorkflowExecutor extends AbstractWorkflowExecutor {
|
||||
|
||||
JobTask jobTask = generateJobTask(context, jobTaskBatch);
|
||||
|
||||
LogMetaDTO logMetaDTO = new LogMetaDTO();
|
||||
logMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
logMetaDTO.setGroupName(context.getGroupName());
|
||||
logMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
logMetaDTO.setJobId(SystemConstants.DECISION_JOB_ID);
|
||||
logMetaDTO.setTaskId(jobTask.getId());
|
||||
JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO();
|
||||
jobLogMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
jobLogMetaDTO.setGroupName(context.getGroupName());
|
||||
jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
jobLogMetaDTO.setJobId(SystemConstants.DECISION_JOB_ID);
|
||||
jobLogMetaDTO.setTaskId(jobTask.getId());
|
||||
if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus()
|
||||
|| JobOperationReasonEnum.WORKFLOW_NODE_NO_REQUIRED.getReason() == context.getOperationReason()) {
|
||||
EasyRetryLog.REMOTE.info("节点Id:[{}] 决策完成. 上下文:[{}] 决策结果:[{}] <|>{}<|>",
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), logMetaDTO);
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), jobLogMetaDTO);
|
||||
} else {
|
||||
EasyRetryLog.REMOTE.error("节点Id:[{}] 决策失败. 上下文:[{}] 失败原因:[{}] <|>{}<|>",
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getLogMessage(), logMetaDTO);
|
||||
context.getWorkflowNodeId(), context.getTaskResult(), context.getLogMessage(), jobLogMetaDTO);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.aizuda.easy.retry.server.job.task.support.executor.workflow;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import com.aizuda.easy.retry.common.core.constant.SystemConstants;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobOperationReasonEnum;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskBatchStatusEnum;
|
||||
import com.aizuda.easy.retry.common.core.enums.JobTaskStatusEnum;
|
||||
@ -9,14 +8,10 @@ import com.aizuda.easy.retry.common.core.enums.StatusEnum;
|
||||
import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.enums.JobTaskExecutorSceneEnum;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobTaskPrepareDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.support.JobTaskConverter;
|
||||
import com.aizuda.easy.retry.server.job.task.support.WorkflowTaskConverter;
|
||||
import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGenerator;
|
||||
import com.aizuda.easy.retry.server.job.task.support.generator.batch.JobTaskBatchGeneratorContext;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTask;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.JobTaskBatch;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -52,15 +47,15 @@ public class JobTaskWorkflowExecutor extends AbstractWorkflowExecutor {
|
||||
JobTaskBatch jobTaskBatch = generateJobTaskBatch(context);
|
||||
JobTask jobTask = generateJobTask(context, jobTaskBatch);
|
||||
|
||||
LogMetaDTO logMetaDTO = new LogMetaDTO();
|
||||
logMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
logMetaDTO.setGroupName(context.getGroupName());
|
||||
logMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
logMetaDTO.setJobId(context.getJobId());
|
||||
logMetaDTO.setTaskId(jobTask.getId());
|
||||
JobLogMetaDTO jobLogMetaDTO = new JobLogMetaDTO();
|
||||
jobLogMetaDTO.setNamespaceId(context.getNamespaceId());
|
||||
jobLogMetaDTO.setGroupName(context.getGroupName());
|
||||
jobLogMetaDTO.setTaskBatchId(jobTaskBatch.getId());
|
||||
jobLogMetaDTO.setJobId(context.getJobId());
|
||||
jobLogMetaDTO.setTaskId(jobTask.getId());
|
||||
|
||||
EasyRetryLog.REMOTE.warn("节点[{}]已取消任务执行. 取消原因: 任务已关闭. <|>{}<|>",
|
||||
context.getWorkflowNodeId(), logMetaDTO);
|
||||
context.getWorkflowNodeId(), jobLogMetaDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,59 @@
|
||||
package com.aizuda.easy.retry.server.job.task.support.log;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.dto.LogContentDTO;
|
||||
import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.LogStorage;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.common.log.LogStorageFactory;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO;
|
||||
import com.aizuda.easy.retry.server.job.task.dto.JobLogMetaDTO;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author: xiaowoniu
|
||||
* @date : 2024-03-22
|
||||
* @since : 3.2.0
|
||||
*/
|
||||
@Component
|
||||
public class JobLogStorage implements LogStorage, InitializingBean {
|
||||
|
||||
@Override
|
||||
public LogTypeEnum logType() {
|
||||
return LogTypeEnum.JOB;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) {
|
||||
|
||||
JobLogMetaDTO jobLogMetaDTO = (JobLogMetaDTO) logMetaDTO;
|
||||
JobLogDTO jobLogDTO = new JobLogDTO();
|
||||
Map<String, String> messageMap = logContentDTO.getFieldList()
|
||||
.stream()
|
||||
.filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue()))
|
||||
.collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue));
|
||||
jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap)));
|
||||
jobLogDTO.setTaskId(jobLogMetaDTO.getTaskId());
|
||||
jobLogDTO.setJobId(jobLogMetaDTO.getJobId());
|
||||
jobLogDTO.setGroupName(logMetaDTO.getGroupName());
|
||||
jobLogDTO.setNamespaceId(logMetaDTO.getNamespaceId());
|
||||
jobLogDTO.setTaskBatchId(jobLogMetaDTO.getTaskBatchId());
|
||||
jobLogDTO.setRealTime(logContentDTO.getTimeStamp());
|
||||
ActorRef actorRef = ActorGenerator.jobLogActor();
|
||||
actorRef.tell(jobLogDTO, actorRef);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
LogStorageFactory.register(logType(), this);
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.dto;
|
||||
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @author xiaowoniu
|
||||
* @date 2024-01-10 22:56:33
|
||||
* @since 3.2.0
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Builder
|
||||
public class RetryLogMetaDTO extends LogMetaDTO {
|
||||
|
||||
public RetryLogMetaDTO () {
|
||||
setLogType(LogTypeEnum.RETRY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组名称
|
||||
*/
|
||||
private String uniqueId;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonUtil.toJsonString(this);
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@ package com.aizuda.easy.retry.server.retry.task.support;
|
||||
|
||||
import com.aizuda.easy.retry.server.model.dto.RetryLogTaskDTO;
|
||||
import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.NotifyConfigPartitionTask;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryPartitionTask;
|
||||
import com.aizuda.easy.retry.server.retry.task.generator.task.TaskContext;
|
||||
@ -51,6 +51,6 @@ public interface RetryTaskConverter {
|
||||
|
||||
RetryTaskLogMessage toRetryTaskLogMessage(RetryLogTaskDTO retryLogTaskDTO);
|
||||
|
||||
LogMetaDTO toLogMetaDTO(RetryTask retryTask);
|
||||
RetryLogMetaDTO toLogMetaDTO(RetryTask retryTask);
|
||||
|
||||
}
|
||||
|
@ -1,26 +1,21 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.exec;
|
||||
|
||||
import akka.actor.AbstractActor;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.aizuda.easy.retry.client.model.RetryCallbackDTO;
|
||||
import com.aizuda.easy.retry.common.core.enums.StatusEnum;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.common.core.model.Result;
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.client.RequestBuilder;
|
||||
import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo;
|
||||
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
|
||||
import com.aizuda.easy.retry.server.common.util.ClientInfoUtils;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.retry.task.client.RetryRpcClient;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.context.CallbackRetryContext;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.handler.CallbackRetryTaskHandler;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor;
|
||||
import com.aizuda.easy.retry.template.datasource.access.AccessTemplate;
|
||||
@ -28,14 +23,12 @@ import com.aizuda.easy.retry.template.datasource.access.TaskAccess;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ -94,9 +87,9 @@ public class ExecCallbackUnitActor extends AbstractActor {
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
logMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), logMetaDTO, e);// retryTaskLog.setMessage(StringUtils.isBlank(e.getMessage()) ? StrUtil.EMPTY : e.getMessage());
|
||||
RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), retryLogMetaDTO, e);// retryTaskLog.setMessage(StringUtils.isBlank(e.getMessage()) ? StrUtil.EMPTY : e.getMessage());
|
||||
} finally {
|
||||
|
||||
// ActorRef actorRef = ActorGenerator.logActor();
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.exec;
|
||||
|
||||
import akka.actor.AbstractActor;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.aizuda.easy.retry.client.model.DispatchRetryDTO;
|
||||
import com.aizuda.easy.retry.client.model.DispatchRetryResultDTO;
|
||||
@ -14,14 +13,11 @@ import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.client.RequestBuilder;
|
||||
import com.aizuda.easy.retry.server.common.dto.RegisterNodeInfo;
|
||||
import com.aizuda.easy.retry.server.common.util.ClientInfoUtils;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.retry.task.client.RetryRpcClient;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.context.MaxAttemptsPersistenceRetryContext;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.SceneConfig;
|
||||
@ -30,7 +26,6 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ -105,9 +100,9 @@ public class ExecUnitActor extends AbstractActor {
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
logMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), logMetaDTO, e);
|
||||
RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("请求客户端异常. <|>{}<|>", retryTask.getUniqueId(), retryLogMetaDTO, e);
|
||||
} finally {
|
||||
|
||||
// ActorRef actorRef = ActorGenerator.logActor();
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.result;
|
||||
|
||||
import akka.actor.AbstractActor;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.Pair;
|
||||
import com.aizuda.easy.retry.common.core.enums.RetryStatusEnum;
|
||||
@ -11,9 +10,6 @@ import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
||||
import com.aizuda.easy.retry.server.common.enums.SyetemTaskTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskLogConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.event.RetryTaskFailMoreThresholdAlarmEvent;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.handler.CallbackRetryTaskHandler;
|
||||
import com.aizuda.easy.retry.template.datasource.access.AccessTemplate;
|
||||
|
@ -3,15 +3,13 @@ package com.aizuda.easy.retry.server.retry.task.support.dispatch.task;
|
||||
import akka.actor.ActorRef;
|
||||
import cn.hutool.core.lang.Pair;
|
||||
import com.aizuda.easy.retry.common.log.EasyRetryLog;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
||||
import com.aizuda.easy.retry.server.common.handler.ClientNodeAllocateHandler;
|
||||
import com.aizuda.easy.retry.server.common.IdempotentStrategy;
|
||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryContext;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.RetryTaskConverter;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.retry.RetryExecutor;
|
||||
import com.aizuda.easy.retry.template.datasource.access.AccessTemplate;
|
||||
import com.aizuda.easy.retry.template.datasource.persistence.po.RetryTask;
|
||||
@ -21,8 +19,6 @@ import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
@ -78,9 +74,9 @@ public abstract class AbstractTaskExecutor implements TaskExecutor, Initializing
|
||||
// retryTaskLog.setTriggerTime(LocalDateTime.now());
|
||||
// ActorRef actorRef = ActorGenerator.logActor();
|
||||
|
||||
LogMetaDTO logMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
logMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("触发条件不满足 原因: [{}] <|>{}<|>", pair.getValue().toString(), logMetaDTO);
|
||||
RetryLogMetaDTO retryLogMetaDTO = RetryTaskConverter.INSTANCE.toLogMetaDTO(retryTask);
|
||||
retryLogMetaDTO.setTimestamp(DateUtils.toNowMilli());
|
||||
EasyRetryLog.REMOTE.error("触发条件不满足 原因: [{}] <|>{}<|>", pair.getValue().toString(), retryLogMetaDTO);
|
||||
|
||||
|
||||
return false;
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.aizuda.easy.retry.server.retry.task.support.log;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||
import com.aizuda.easy.retry.common.log.dto.LogContentDTO;
|
||||
import com.aizuda.easy.retry.common.log.dto.TaskLogFieldDTO;
|
||||
import com.aizuda.easy.retry.common.log.enums.LogTypeEnum;
|
||||
import com.aizuda.easy.retry.server.common.LogStorage;
|
||||
import com.aizuda.easy.retry.server.common.akka.ActorGenerator;
|
||||
import com.aizuda.easy.retry.server.common.dto.LogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.common.log.LogStorageFactory;
|
||||
import com.aizuda.easy.retry.server.retry.task.dto.RetryLogMetaDTO;
|
||||
import com.aizuda.easy.retry.server.retry.task.support.dispatch.actor.log.RetryTaskLogDTO;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author: xiaowoniu
|
||||
* @date : 2024-03-22
|
||||
* @since : 3.2.0
|
||||
*/
|
||||
@Component
|
||||
public class RetryLogStorage implements LogStorage, InitializingBean {
|
||||
|
||||
@Override
|
||||
public LogTypeEnum logType() {
|
||||
return LogTypeEnum.JOB;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storage(final LogContentDTO logContentDTO, final LogMetaDTO logMetaDTO) {
|
||||
RetryLogMetaDTO retryLogMetaDTO = (RetryLogMetaDTO) logMetaDTO;
|
||||
RetryTaskLogDTO jobLogDTO = new RetryTaskLogDTO();
|
||||
Map<String, String> messageMap = logContentDTO.getFieldList()
|
||||
.stream()
|
||||
.filter(logTaskDTO_ -> !Objects.isNull(logTaskDTO_.getValue()))
|
||||
.collect(Collectors.toMap(TaskLogFieldDTO::getName, TaskLogFieldDTO::getValue));
|
||||
jobLogDTO.setMessage(JsonUtil.toJsonString(Lists.newArrayList(messageMap)));
|
||||
jobLogDTO.setGroupName(retryLogMetaDTO.getGroupName());
|
||||
jobLogDTO.setNamespaceId(retryLogMetaDTO.getNamespaceId());
|
||||
jobLogDTO.setUniqueId(retryLogMetaDTO.getUniqueId());
|
||||
jobLogDTO.setRealTime(retryLogMetaDTO.getTimestamp());
|
||||
ActorRef actorRef = ActorGenerator.jobLogActor();
|
||||
actorRef.tell(jobLogDTO, actorRef);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
LogStorageFactory.register(logType(), this);
|
||||
}
|
||||
}
|
@ -79,9 +79,7 @@
|
||||
</appender>
|
||||
|
||||
<!-- EasyRetry appender -->
|
||||
<appender name="easyLogServerAppender" class="com.aizuda.easy.retry.server.job.task.support.appender.EasyRetryServerLogbackAppender">
|
||||
</appender>
|
||||
<appender name="easyRetryLogServerAppender" class="com.aizuda.easy.retry.server.retry.task.support.appender.EasyRetryServerLogbackAppender">
|
||||
<appender name="easyLogServerAppender" class="com.aizuda.easy.retry.server.common.appender.EasyRetryServerLogbackAppender">
|
||||
</appender>
|
||||
|
||||
<!-- 控制台输出日志级别 -->
|
||||
@ -91,6 +89,5 @@
|
||||
<appender-ref ref="asyncWarn" />
|
||||
<appender-ref ref="asyncError" />
|
||||
<appender-ref ref="easyLogServerAppender" />
|
||||
<appender-ref ref="easyRetryLogServerAppender" />
|
||||
</root>
|
||||
</configuration>
|
||||
|
Loading…
Reference in New Issue
Block a user