浏览代码

Log地址格式兼容,支持非"/"结尾路径配置;

xuxueli 8 年前
父节点
当前提交
3c95ba5ae4

+ 3 - 3
doc/XXL-JOB官方文档.md 查看文件

1077
 - 12、调度报表优化,支持时间区间筛选;
1077
 - 12、调度报表优化,支持时间区间筛选;
1078
 - 13、Log组件支持输出异常栈信息,底层实现优化;
1078
 - 13、Log组件支持输出异常栈信息,底层实现优化;
1079
 - 14、失败重试:调度中心调度失败且启用"失败重试"策略时,将会自动重试一次;执行器执行失败且回调失败重试状态时,也将会自动重试一次;
1079
 - 14、失败重试:调度中心调度失败且启用"失败重试"策略时,将会自动重试一次;执行器执行失败且回调失败重试状态时,也将会自动重试一次;
1080
+- 15、Log地址格式兼容,支持非"/"结尾路径配置;
1081
+
1080
 
1082
 
1081
 ### TODO LIST
1083
 ### TODO LIST
1082
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1084
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
1096
 - 15、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
1098
 - 15、Bean模式任务,JobHandler自动从执行器中查询展示为下拉框,选择后自动填充任务名称等属性;
1097
 - 16、任务告警邮件优化,调整为表格形式;
1099
 - 16、任务告警邮件优化,调整为表格形式;
1098
 - 17、JobHandler提供 init/destroy 方法,支持自定义任务线程销毁逻辑;
1100
 - 17、JobHandler提供 init/destroy 方法,支持自定义任务线程销毁逻辑;
1099
-- 18、执行器回调地址/日志地址格式兼容,是否已"/"结尾均支持;
1100
-
1101
-
1101
+- 18、执行器回调地址格式兼容,支持非"/"结尾路径配置;
1102
 
1102
 
1103
 
1103
 
1104
 ## 七、其他
1104
 ## 七、其他

+ 6 - 6
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java 查看文件

72
         initAdminBizList(adminAddresses, accessToken);
72
         initAdminBizList(adminAddresses, accessToken);
73
 
73
 
74
         // init executor-jobHandlerRepository
74
         // init executor-jobHandlerRepository
75
-        if (applicationContext != null) {
76
-            initJobHandlerRepository(applicationContext);
77
-        }
75
+        initJobHandlerRepository(applicationContext);
78
 
76
 
79
         // init logpath
77
         // init logpath
80
-        if (logPath!=null && logPath.trim().length()>0) {
81
-            XxlJobFileAppender.logPath = logPath;
82
-        }
78
+        XxlJobFileAppender.initLogPath(logPath);
83
 
79
 
84
         // init executor-server
80
         // init executor-server
85
         initExecutorServer(port, ip, appName, accessToken);
81
         initExecutorServer(port, ip, appName, accessToken);
145
         return jobHandlerRepository.get(name);
141
         return jobHandlerRepository.get(name);
146
     }
142
     }
147
     private static void initJobHandlerRepository(ApplicationContext applicationContext){
143
     private static void initJobHandlerRepository(ApplicationContext applicationContext){
144
+        if (applicationContext == null) {
145
+            return;
146
+        }
147
+
148
         // init job handler action
148
         // init job handler action
149
         Map<String, Object> serviceBeanMap = applicationContext.getBeansWithAnnotation(JobHandler.class);
149
         Map<String, Object> serviceBeanMap = applicationContext.getBeansWithAnnotation(JobHandler.class);
150
 
150
 

+ 4 - 4
xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java 查看文件

36
         String scriptFileName = null;
36
         String scriptFileName = null;
37
         if (GlueTypeEnum.GLUE_SHELL == glueType) {
37
         if (GlueTypeEnum.GLUE_SHELL == glueType) {
38
             cmd = "bash";
38
             cmd = "bash";
39
-            scriptFileName = XxlJobFileAppender.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh");
39
+            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".sh");
40
         } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
40
         } else if (GlueTypeEnum.GLUE_PYTHON == glueType) {
41
             cmd = "python";
41
             cmd = "python";
42
-            scriptFileName = XxlJobFileAppender.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py");
42
+            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".py");
43
         } else if (GlueTypeEnum.GLUE_NODEJS == glueType) {
43
         } else if (GlueTypeEnum.GLUE_NODEJS == glueType) {
44
             cmd = "node";
44
             cmd = "node";
45
-            scriptFileName = XxlJobFileAppender.logPath.concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".js");
45
+            scriptFileName = XxlJobFileAppender.getLogPath().concat("gluesource/").concat(String.valueOf(jobId)).concat("_").concat(String.valueOf(glueUpdatetime)).concat(".js");
46
         }
46
         }
47
 
47
 
48
         // make script file
48
         // make script file
49
         ScriptUtil.markScriptFile(scriptFileName, gluesource);
49
         ScriptUtil.markScriptFile(scriptFileName, gluesource);
50
 
50
 
51
         // log file
51
         // log file
52
-        String logFileName = XxlJobFileAppender.logPath.concat(XxlJobFileAppender.contextHolder.get());
52
+        String logFileName = XxlJobFileAppender.getLogPath().concat(XxlJobFileAppender.contextHolder.get());
53
 
53
 
54
         // invoke
54
         // invoke
55
         XxlJobLogger.log("----------- script file:"+ scriptFileName +" -----------");
55
         XxlJobLogger.log("----------- script file:"+ scriptFileName +" -----------");

+ 22 - 1
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java 查看文件

18
 	// for JobThread (support log for child thread of job handler)
18
 	// for JobThread (support log for child thread of job handler)
19
 	//public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
19
 	//public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
20
 	public static final InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
20
 	public static final InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
21
-	public static String logPath = "/data/applogs/xxl-job/jobhandler/";
21
+
22
+
23
+	private static String logPath = "/data/applogs/xxl-job/jobhandler/";
24
+	public static void initLogPath(String logPath){
25
+		// init
26
+		if (logPath!=null && logPath.trim().length()>0) {
27
+			/*if (!logPath.endsWith("/")) {
28
+				logPath = logPath.concat("/");
29
+			}*/
30
+			XxlJobFileAppender.logPath = logPath;
31
+		}
32
+		// mk dir
33
+		File logPathDir = new File(XxlJobFileAppender.logPath);
34
+		if (!logPathDir.exists()) {
35
+			logPathDir.mkdirs();
36
+		}
37
+		XxlJobFileAppender.logPath = logPathDir.getPath();
38
+	}
39
+	public static String getLogPath() {
40
+		return logPath;
41
+	}
42
+
22
 
43
 
23
 	/**
44
 	/**
24
 	 * log filename: yyyy-MM-dd/9999.log
45
 	 * log filename: yyyy-MM-dd/9999.log

+ 1 - 1
xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java 查看文件

28
      */
28
      */
29
     public static void markScriptFile(String scriptFileName, String content) throws IOException {
29
     public static void markScriptFile(String scriptFileName, String content) throws IOException {
30
         // filePath/
30
         // filePath/
31
-        File filePathDir = new File(XxlJobFileAppender.logPath);
31
+        File filePathDir = new File(XxlJobFileAppender.getLogPath());
32
         if (!filePathDir.exists()) {
32
         if (!filePathDir.exists()) {
33
             filePathDir.mkdirs();
33
             filePathDir.mkdirs();
34
         }
34
         }