xuxueli 7 年前
父节点
当前提交
029433c351
共有 2 个文件被更改,包括 13 次插入11 次删除
  1. 10 9
      doc/XXL-JOB官方文档.md
  2. 3 2
      xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java

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

@@ -998,15 +998,16 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
998 998
 - 11、统一maven依赖版本管理;
999 999
 
1000 1000
 ### 6.18 版本 V1.8.2 特性[Coding]
1001
-- 1、解决执行器回调URL不支持配置HTTPS时问题;
1002
-- 2、规范项目目录,方便扩展多执行器;
1003
-- 3、新增JFinal类型执行器sample示例项目;
1004
-- 4、执行器手动设置IP时将会绑定Host;
1005
-- 5、项目主页搭建,提供中英文文档(http://www.xuxueli.com/xxl-job);
1006
-- 6、执行器回调线程销毁前, 批量回调队列中数据,防止任务结果丢失;
1007
-- 7、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
1008
-- 8、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
1009
-- 9、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
1001
+- 1、项目主页搭建:提供中英文文档:http://www.xuxueli.com/xxl-job 
1002
+- 2、JFinal执行器Sample示例项目;
1003
+- 3、事件触发:除了"Cron方式"和"任务依赖方式"触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发。
1004
+- 4、执行器摘除:执行器销毁时,主动通知调度中心并摘除对应执行器节点,提高执行器状态感知的时效性。
1005
+- 5、执行器手动设置IP时将会绑定Host;
1006
+- 6、规范项目目录,方便扩展多执行器;
1007
+- 7、解决执行器回调URL不支持配置HTTPS时问题;
1008
+- 8、执行器回调线程销毁前, 批量回调队列中数据,防止任务结果丢失;
1009
+- 9、调度中心任务监控线程销毁时,批量对失败任务告警,防止告警信息丢失;
1010
+- 10、任务日志文件路径时间戳格式化时SimpleDateFormat并发问题解决;
1010 1011
 
1011 1012
 ### TODO LIST
1012 1013
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;

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

@@ -18,7 +18,6 @@ public class XxlJobFileAppender {
18 18
 	// for JobThread (support log for child thread of job handler)
19 19
 	//public static ThreadLocal<String> contextHolder = new ThreadLocal<String>();
20 20
 	public static final InheritableThreadLocal<String> contextHolder = new InheritableThreadLocal<String>();
21
-	public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// TODO, concurrent issues
22 21
 	public static String logPath = "/data/applogs/xxl-job/jobhandler/";
23 22
 
24 23
 	/**
@@ -37,6 +36,8 @@ public class XxlJobFileAppender {
37 36
         }
38 37
 
39 38
         // filePath/yyyy-MM-dd/
39
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	// avoid concurrent problem, can not be static
40
+
40 41
         String nowFormat = sdf.format(new Date());
41 42
         File filePathDateDir = new File(filePathDir, nowFormat);
42 43
         if (!filePathDateDir.exists()) {
@@ -44,7 +45,7 @@ public class XxlJobFileAppender {
44 45
         }
45 46
 
46 47
         // filePath/yyyy-MM-dd/9999.log
47
-		String logFileName = XxlJobFileAppender.sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
48
+		String logFileName = sdf.format(triggerDate).concat("/").concat(String.valueOf(logId)).concat(".log");
48 49
 		return logFileName;
49 50
 	}
50 51