Browse Source

JobHandler中开启子线程时,支持子线程输出执行日志并通过Rolling查看。

xueli.xue 8 years ago
parent
commit
7b59be46c5

+ 10 - 3
README.md View File

409
 }
409
 }
410
 ```
410
 ```
411
 
411
 
412
+而且,在JobHandler中开启子线程时,子线程也不可catch处理"InterruptedException",应该主动向上抛出。
413
+
412
 #### 4.9 删除任务
414
 #### 4.9 删除任务
413
 点击删除按钮,可以删除对应任务。
415
 点击删除按钮,可以删除对应任务。
414
 
416
 
598
 
600
 
599
 日志文件存放的位置可在“执行器”配置文件进行自定义,默认目录格式为:/data/applogs/xxl-job/jobhandler/“格式化日期”/“数据库调度日志记录的主键ID.log”。
601
 日志文件存放的位置可在“执行器”配置文件进行自定义,默认目录格式为:/data/applogs/xxl-job/jobhandler/“格式化日期”/“数据库调度日志记录的主键ID.log”。
600
 
602
 
603
+在JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。
604
+
601
 #### 5.6 通讯模块剖析
605
 #### 5.6 通讯模块剖析
602
 
606
 
603
 ##### 5.6.1 一次完整的任务调度通讯流程 
607
 ##### 5.6.1 一次完整的任务调度通讯流程 
804
 - 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
808
 - 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
805
 
809
 
806
 #### 6.15 版本 V1.7.1 特性(Coding)
810
 #### 6.15 版本 V1.7.1 特性(Coding)
807
-- 1、任务分片:一个任务被拆分成N个独立的任务单元,然后由分布式部署的执行器分别执行某一个或几个分片单元;
808
-- 2、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;
809
-
811
+- 1、运行日志读写编码统一,解决windows环境下日志乱码问题;
812
+- 2、通讯超时时间设置为10s,避免异常情况下调度线程占用;
813
+- 3、JettyServer关闭逻辑优化,修复执行器无法正常关闭的问题;
814
+- 4、JobHandler中开启子线程时,支持子线程输出执行日志并通过Rolling查看。
810
 
815
 
811
 #### TODO LIST
816
 #### TODO LIST
812
 - 1、任务并行触发处理规则:单机串行队列(默认)、单机并行、串行忽略、单机覆盖;
817
 - 1、任务并行触发处理规则:单机串行队列(默认)、单机并行、串行忽略、单机覆盖;
816
 - 5、JobHandler开启多线程时,支持记录执行日志;
821
 - 5、JobHandler开启多线程时,支持记录执行日志;
817
 - 6、执行器与数据库解耦,只需配置调度中心集群地址即可(与当前通过JDBC注册自动发现方式,相冲突,待考虑);
822
 - 6、执行器与数据库解耦,只需配置调度中心集群地址即可(与当前通过JDBC注册自动发现方式,相冲突,待考虑);
818
 - 7、任务日志定期清理功能,支持设置日志上限;
823
 - 7、任务日志定期清理功能,支持设置日志上限;
824
+- 8、任务分片:一个任务被拆分成N个独立的任务单元,然后由分布式部署的执行器分别执行某一个或几个分片单元;
825
+- 9、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;
819
 
826
 
820
 
827
 
821
 ## 七、其他
828
 ## 七、其他

+ 2 - 2
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl View File

81
 			<!-- sidebar menu: : style can be found in sidebar.less -->
81
 			<!-- sidebar menu: : style can be found in sidebar.less -->
82
 			<ul class="sidebar-menu">
82
 			<ul class="sidebar-menu">
83
 				<li class="header">常用模块</li>
83
 				<li class="header">常用模块</li>
84
-				<li class="nav-click <#if pageName == "jobinfo">active</#if>" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-aqua"></i> <span>任务管理</span></a></li>
84
+				<li class="nav-click <#if pageName == "jobinfo">active</#if>" ><a href="${request.contextPath}/jobinfo"><i class="fa fa-circle-o text-aqua"></i><span>任务管理</span></a></li>
85
 				<li class="nav-click <#if pageName == "joblog">active</#if>" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
85
 				<li class="nav-click <#if pageName == "joblog">active</#if>" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
86
-                <li class="nav-click <#if pageName == "jobgroup">active</#if>" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-green"></i> <span>执行器管理</span></a></li>
86
+                <li class="nav-click <#if pageName == "jobgroup">active</#if>" ><a href="${request.contextPath}/jobgroup"><i class="fa fa-circle-o text-green"></i><span>执行器管理</span></a></li>
87
 				<li class="nav-click <#if pageName == "help">active</#if>" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-gray"></i><span>使用教程</span></a></li>
87
 				<li class="nav-click <#if pageName == "help">active</#if>" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-gray"></i><span>使用教程</span></a></li>
88
 			</ul>
88
 			</ul>
89
 		</section>
89
 		</section>

+ 4 - 1
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js View File

143
 	                		return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
143
 	                		return data?'<a class="logTips" href="javascript:;" >查看<span style="display:none;">'+ data +'</span></a>':"无";
144
 	                	}
144
 	                	}
145
 	                },
145
 	                },
146
-	                { "data": 'handleMsg' , "bSortable": false,
146
+	                {
147
+						"data": 'handleMsg' ,
148
+						"bSortable": false,
149
+						"width": "8%" ,
147
 	                	"render": function ( data, type, row ) {
150
 	                	"render": function ( data, type, row ) {
148
 	                		// better support expression or string, not function
151
 	                		// better support expression or string, not function
149
 	                		return function () {
152
 	                		return function () {

+ 3 - 2
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java View File

16
 public class XxlJobFileAppender {
16
 public class XxlJobFileAppender {
17
 	private static Logger logger = LoggerFactory.getLogger(XxlJobFileAppender.class);
17
 	private static Logger logger = LoggerFactory.getLogger(XxlJobFileAppender.class);
18
 	
18
 	
19
-	// for JobThread
20
-	public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
19
+	// for JobThread (support log for child thread)
20
+	//public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
21
+	public static InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
21
 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
22
 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
22
 	
23
 	
23
 	/**
24
 	/**