xueli.xue пре 8 година
родитељ
комит
6b91f40889

+ 10 - 7
README.md Прегледај датотеку

@@ -705,8 +705,10 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
705 705
 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
706 706
 
707 707
 #### 6.10 版本 V1.5.2 特性
708
-- 1、IP工具类优化,IP静态缓存;
709
-- 2、执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
708
+- 1、IP工具类获取IP逻辑优化,IP静态缓存;
709
+- 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
710
+- 3、任务跨天执行时生成多份日志文件的问题修复;
711
+
710 712
 
711 713
 #### 规划中
712 714
 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;
@@ -717,11 +719,12 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
717 719
     Pass:后续调度被Pass;
718 720
 - 4、后续优化:在线修改密码;
719 721
 - 5、兼容oracle;
720
-- 6、跨天日志write问题修复;
721
-- 7、rolling日志;
722
-- 8、执行器,server启动,注册逻辑调整;
723
-- 9、通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想;
724
-- 10、调度重试机制;
722
+- 6、rolling日志;
723
+- 7、执行器,server启动,注册逻辑调整;
724
+- 8、通过listener或stop方法,容器销毁时销毁线程;Daemon方式有时不太理想;
725
+- 9、调度重试机制;
726
+- 10、报表:当日报表、一周报表、一年报表等等;
727
+- 11、通讯:hex 通讯调整为 http-rpc 模式;
725 728
 
726 729
 ## 七、其他
727 730
 

+ 5 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java Прегледај датотеку

@@ -52,6 +52,9 @@ public class RemoteHttpJobBean extends QuartzJobBean {
52 52
         }
53 53
         adminAddressSet.add(DynamicSchedulerUtil.getCallbackAddress());
54 54
 
55
+		// update trigger info 1/2
56
+		jobLog.setTriggerTime(new Date());
57
+
55 58
 		// trigger request
56 59
 		RequestModel requestModel = new RequestModel();
57 60
 		requestModel.setTimestamp(System.currentTimeMillis());
@@ -63,6 +66,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
63 66
 		requestModel.setGlueSwitch((jobInfo.getGlueSwitch()==0)?false:true);
64 67
 		requestModel.setLogAddress(adminAddressSet);
65 68
 		requestModel.setLogId(jobLog.getId());
69
+		requestModel.setLogDateTim(jobLog.getTriggerTime().getTime());
66 70
 
67 71
 		// parse address
68 72
 		List<String> addressList = new ArrayList<String>();
@@ -77,8 +81,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
77 81
 		jobLog.setExecutorParam(jobInfo.getExecutorParam());
78 82
 		logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}", jobLog.getId(), responseModel.toString());
79 83
 		
80
-		// update trigger info
81
-		jobLog.setTriggerTime(new Date());
84
+		// update trigger info 2/2
82 85
 		jobLog.setTriggerStatus(responseModel.getStatus());
83 86
 		jobLog.setTriggerMsg(responseModel.getMsg());
84 87
 		DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog);

+ 39 - 41
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java Прегледај датотеку

@@ -23,30 +23,43 @@ public class XxlJobFileAppender extends AppenderSkeleton {
23 23
 	public void setFilePath(String filePath) {
24 24
 		XxlJobFileAppender.filePath = filePath;
25 25
 	}
26
-	
26
+
27
+	/**
28
+	 * log filename: yyyy-MM-dd/9999.log
29
+	 *
30
+	 * @param triggerDate
31
+	 * @param logId
32
+	 * @return
33
+	 */
34
+	public static String makeLogFileName(Date triggerDate, int logId) {
35
+
36
+        // filePath/
37
+        File filePathDir = new File(filePath);
38
+        if (!filePathDir.exists()) {
39
+            filePathDir.mkdirs();
40
+        }
41
+
42
+        // filePath/yyyy-MM-dd/
43
+        String nowFormat = sdf.format(new Date());
44
+        File filePathDateDir = new File(filePathDir, nowFormat);
45
+        if (!filePathDateDir.exists()) {
46
+            filePathDateDir.mkdirs();
47
+        }
48
+
49
+        // filePath/yyyy-MM-dd/9999.log
50
+		String logFileName = XxlJobFileAppender.sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
51
+		return logFileName;
52
+	}
53
+
27 54
 	@Override
28 55
 	protected void append(LoggingEvent event) {
29
-		String trigger_log_id = contextHolder.get();
30
-		if (trigger_log_id==null || trigger_log_id.trim().length()==0) {
56
+
57
+		String logFileName = contextHolder.get();
58
+		if (logFileName==null || logFileName.trim().length()==0) {
31 59
 			return;
32 60
 		}
33
-		
34
-		// filePath/
35
-		File filePathDir = new File(filePath);	
36
-		if (!filePathDir.exists()) {
37
-			filePathDir.mkdirs();
38
-		}
39
-		
40
-		// filePath/yyyy-MM-dd/
41
-		String nowFormat = sdf.format(new Date());
42
-		File filePathDateDir = new File(filePathDir, nowFormat);	
43
-		if (!filePathDateDir.exists()) {
44
-			filePathDateDir.mkdirs();
45
-		}
46
-		
47
-		// filePath/yyyy-MM-dd/9999.log
48
-		String logFileName = trigger_log_id.concat(".log");
49
-		File logFile = new File(filePathDateDir, logFileName);	
61
+		File logFile = new File(filePath, logFileName);
62
+
50 63
 		if (!logFile.exists()) {
51 64
 			try {
52 65
 				logFile.createNewFile();
@@ -101,31 +114,16 @@ public class XxlJobFileAppender extends AppenderSkeleton {
101 114
 	
102 115
 	/**
103 116
 	 * support read log-file
104
-	 * @param triggerDate
105
-	 * @param trigger_log_id
117
+	 * @param logFileName
106 118
 	 * @return log content
107 119
 	 */
108
-	public static String readLog(Date triggerDate, int trigger_log_id ){
109
-		if (triggerDate==null || trigger_log_id<=0) {
120
+	public static String readLog(String logFileName ){
121
+
122
+		if (logFileName==null || logFileName.trim().length()==0) {
110 123
 			return null;
111 124
 		}
112
-		
113
-		// filePath/
114
-		File filePathDir = new File(filePath);	
115
-		if (!filePathDir.exists()) {
116
-			filePathDir.mkdirs();
117
-		}
118
-		
119
-		// filePath/yyyy-MM-dd/
120
-		String nowFormat = sdf.format(triggerDate);
121
-		File filePathDateDir = new File(filePathDir, nowFormat);	
122
-		if (!filePathDateDir.exists()) {
123
-			filePathDateDir.mkdirs();
124
-		}
125
-		
126
-		// filePath/yyyy-MM-dd/9999.log
127
-		String logFileName = String.valueOf(trigger_log_id).concat(".log");
128
-		File logFile = new File(filePathDateDir, logFileName);	
125
+		File logFile = new File(filePath, logFileName);
126
+
129 127
 		if (!logFile.exists()) {
130 128
 			return null;
131 129
 		}

+ 4 - 1
xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java Прегледај датотеку

@@ -14,7 +14,10 @@ public class LogAction extends IAction {
14 14
 
15 15
     @Override
16 16
     public ResponseModel execute(RequestModel requestModel) {
17
-        String logConteng = XxlJobFileAppender.readLog(new Date(requestModel.getLogDateTim()), requestModel.getLogId());
17
+        // log filename: yyyy-MM-dd/9999.log
18
+        String logFileName = XxlJobFileAppender.makeLogFileName(new Date(requestModel.getLogDateTim()), requestModel.getLogId());
19
+
20
+        String logConteng = XxlJobFileAppender.readLog(logFileName);
18 21
         return new ResponseModel(ResponseModel.SUCCESS, logConteng);
19 22
     }
20 23
 

+ 5 - 1
xxl-job-core/src/main/java/com/xxl/job/core/router/thread/JobThread.java Прегледај датотеку

@@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory;
11 11
 import java.io.PrintWriter;
12 12
 import java.io.StringWriter;
13 13
 import java.util.Arrays;
14
+import java.util.Date;
14 15
 import java.util.concurrent.LinkedBlockingQueue;
15 16
 import java.util.concurrent.TimeUnit;
16 17
 
@@ -78,7 +79,10 @@ public class JobThread extends Thread{
78 79
 					String _msg = null;
79 80
 
80 81
 					try {
81
-						XxlJobFileAppender.contextHolder.set(String.valueOf(triggerDate.getLogId()));
82
+						// log filename: yyyy-MM-dd/9999.log
83
+						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerDate.getLogDateTim()), triggerDate.getLogId());
84
+
85
+						XxlJobFileAppender.contextHolder.set(logFileName);
82 86
 						logger.info("----------- xxl-job job handle start -----------");
83 87
 						handler.execute(handlerParams);
84 88
 					} catch (Exception e) {