xueli.xue 8 anni fa
parent
commit
6b91f40889

+ 10 - 7
README.md Vedi File

705
 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
705
 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
706
 
706
 
707
 #### 6.10 版本 V1.5.2 特性
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
 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;
714
 - 1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;
717
     Pass:后续调度被Pass;
719
     Pass:后续调度被Pass;
718
 - 4、后续优化:在线修改密码;
720
 - 4、后续优化:在线修改密码;
719
 - 5、兼容oracle;
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 Vedi File

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

+ 39 - 41
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java Vedi File

23
 	public void setFilePath(String filePath) {
23
 	public void setFilePath(String filePath) {
24
 		XxlJobFileAppender.filePath = filePath;
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
 	@Override
54
 	@Override
28
 	protected void append(LoggingEvent event) {
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
 			return;
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
 		if (!logFile.exists()) {
63
 		if (!logFile.exists()) {
51
 			try {
64
 			try {
52
 				logFile.createNewFile();
65
 				logFile.createNewFile();
101
 	
114
 	
102
 	/**
115
 	/**
103
 	 * support read log-file
116
 	 * support read log-file
104
-	 * @param triggerDate
105
-	 * @param trigger_log_id
117
+	 * @param logFileName
106
 	 * @return log content
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
 			return null;
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
 		if (!logFile.exists()) {
127
 		if (!logFile.exists()) {
130
 			return null;
128
 			return null;
131
 		}
129
 		}

+ 4 - 1
xxl-job-core/src/main/java/com/xxl/job/core/router/action/LogAction.java Vedi File

14
 
14
 
15
     @Override
15
     @Override
16
     public ResponseModel execute(RequestModel requestModel) {
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
         return new ResponseModel(ResponseModel.SUCCESS, logConteng);
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 Vedi File

11
 import java.io.PrintWriter;
11
 import java.io.PrintWriter;
12
 import java.io.StringWriter;
12
 import java.io.StringWriter;
13
 import java.util.Arrays;
13
 import java.util.Arrays;
14
+import java.util.Date;
14
 import java.util.concurrent.LinkedBlockingQueue;
15
 import java.util.concurrent.LinkedBlockingQueue;
15
 import java.util.concurrent.TimeUnit;
16
 import java.util.concurrent.TimeUnit;
16
 
17
 
78
 					String _msg = null;
79
 					String _msg = null;
79
 
80
 
80
 					try {
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
 						logger.info("----------- xxl-job job handle start -----------");
86
 						logger.info("----------- xxl-job job handle start -----------");
83
 						handler.execute(handlerParams);
87
 						handler.execute(handlerParams);
84
 					} catch (Exception e) {
88
 					} catch (Exception e) {