diff --git a/README.md b/README.md index 65e1fc6d..cd7d945a 100644 --- a/README.md +++ b/README.md @@ -705,8 +705,10 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库; #### 6.10 版本 V1.5.2 特性 -- 1、IP工具类优化,IP静态缓存; -- 2、执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况; +- 1、IP工具类获取IP逻辑优化,IP静态缓存; +- 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况; +- 3、任务跨天执行时生成多份日志文件的问题修复; + #### 规划中 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个; @@ -717,11 +719,12 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 Pass:后续调度被Pass; - 4、后续优化:在线修改密码; - 5、兼容oracle; -- 6、跨天日志write问题修复; -- 7、rolling日志; -- 8、执行器,server启动,注册逻辑调整; -- 9、通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想; -- 10、调度重试机制; +- 6、rolling日志; +- 7、执行器,server启动,注册逻辑调整; +- 8、通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想; +- 9、调度重试机制; +- 10、报表:当日报表、一周报表、一年报表等等; +- 11、通讯:hex 通讯调整为 http-rpc 模式; ## 七、其他 diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java index 18e74372..fb6a9c7c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java @@ -52,6 +52,9 @@ public class RemoteHttpJobBean extends QuartzJobBean { } adminAddressSet.add(DynamicSchedulerUtil.getCallbackAddress()); + // update trigger info 1/2 + jobLog.setTriggerTime(new Date()); + // trigger request RequestModel requestModel = new RequestModel(); requestModel.setTimestamp(System.currentTimeMillis()); @@ -63,6 +66,7 @@ public class RemoteHttpJobBean extends QuartzJobBean { requestModel.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true); requestModel.setLogAddress(adminAddressSet); requestModel.setLogId(jobLog.getId()); + requestModel.setLogDateTim(jobLog.getTriggerTime().getTime()); // parse address List addressList = new ArrayList(); @@ -77,8 +81,7 @@ public class RemoteHttpJobBean extends QuartzJobBean { jobLog.setExecutorParam(jobInfo.getExecutorParam()); logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}", jobLog.getId(), responseModel.toString()); - // update trigger info - jobLog.setTriggerTime(new Date()); + // update trigger info 2/2 jobLog.setTriggerStatus(responseModel.getStatus()); jobLog.setTriggerMsg(responseModel.getMsg()); DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog); diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java index 4fa1fc05..0e1a3955 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java @@ -23,30 +23,43 @@ public class XxlJobFileAppender extends AppenderSkeleton { public void setFilePath(String filePath) { XxlJobFileAppender.filePath = filePath; } - + + /** + * log filename: yyyy-MM-dd/9999.log + * + * @param triggerDate + * @param logId + * @return + */ + public static String makeLogFileName(Date triggerDate, int logId) { + + // filePath/ + File filePathDir = new File(filePath); + if (!filePathDir.exists()) { + filePathDir.mkdirs(); + } + + // filePath/yyyy-MM-dd/ + String nowFormat = sdf.format(new Date()); + File filePathDateDir = new File(filePathDir, nowFormat); + if (!filePathDateDir.exists()) { + filePathDateDir.mkdirs(); + } + + // filePath/yyyy-MM-dd/9999.log + String logFileName = XxlJobFileAppender.sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log"); + return logFileName; + } + @Override protected void append(LoggingEvent event) { - String trigger_log_id = contextHolder.get(); - if (trigger_log_id==null || trigger_log_id.trim().length()==0) { + + String logFileName = contextHolder.get(); + if (logFileName==null || logFileName.trim().length()==0) { return; } - - // filePath/ - File filePathDir = new File(filePath); - if (!filePathDir.exists()) { - filePathDir.mkdirs(); - } - - // filePath/yyyy-MM-dd/ - String nowFormat = sdf.format(new Date()); - File filePathDateDir = new File(filePathDir, nowFormat); - if (!filePathDateDir.exists()) { - filePathDateDir.mkdirs(); - } - - // filePath/yyyy-MM-dd/9999.log - String logFileName = trigger_log_id.concat(".log"); - File logFile = new File(filePathDateDir, logFileName); + File logFile = new File(filePath, logFileName); + if (!logFile.exists()) { try { logFile.createNewFile(); @@ -101,31 +114,16 @@ public class XxlJobFileAppender extends AppenderSkeleton { /** * support read log-file - * @param triggerDate - * @param trigger_log_id + * @param logFileName * @return log content */ - public static String readLog(Date triggerDate, int trigger_log_id ){ - if (triggerDate==null || trigger_log_id<=0) { + public static String readLog(String logFileName ){ + + if (logFileName==null || logFileName.trim().length()==0) { return null; } - - // filePath/ - File filePathDir = new File(filePath); - if (!filePathDir.exists()) { - filePathDir.mkdirs(); - } - - // filePath/yyyy-MM-dd/ - String nowFormat = sdf.format(triggerDate); - File filePathDateDir = new File(filePathDir, nowFormat); - if (!filePathDateDir.exists()) { - filePathDateDir.mkdirs(); - } - - // filePath/yyyy-MM-dd/9999.log - String logFileName = String.valueOf(trigger_log_id).concat(".log"); - File logFile = new File(filePathDateDir, logFileName); + File logFile = new File(filePath, logFileName); + if (!logFile.exists()) { return null; } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java b/xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java index 8c9923a5..3cbd54ca 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java @@ -14,7 +14,10 @@ public class LogAction extends IAction { @Override public ResponseModel execute(RequestModel requestModel) { - String logConteng = XxlJobFileAppender.readLog(new Date(requestModel.getLogDateTim()), requestModel.getLogId()); + // log filename: yyyy-MM-dd/9999.log + String logFileName = XxlJobFileAppender.makeLogFileName(new Date(requestModel.getLogDateTim()), requestModel.getLogId()); + + String logConteng = XxlJobFileAppender.readLog(logFileName); return new ResponseModel(ResponseModel.SUCCESS, logConteng); } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/router/thread/JobThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/router/thread/JobThread.java index 0ab17723..431c7908 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/router/thread/JobThread.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/router/thread/JobThread.java @@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Arrays; +import java.util.Date; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -78,7 +79,10 @@ public class JobThread extends Thread{ String _msg = null; try { - XxlJobFileAppender.contextHolder.set(String.valueOf(triggerDate.getLogId())); + // log filename: yyyy-MM-dd/9999.log + String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerDate.getLogDateTim()), triggerDate.getLogId()); + + XxlJobFileAppender.contextHolder.set(logFileName); logger.info("----------- xxl-job job handle start -----------"); handler.execute(handlerParams); } catch (Exception e) {