瀏覽代碼

rolling日志

xueli.xue 8 年之前
父節點
當前提交
d917c9443b

+ 6 - 10
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java 查看文件

@@ -101,18 +101,14 @@ public class JobLogController {
101 101
 		ReturnT<String> logStatue = ReturnT.SUCCESS;
102 102
 		XxlJobLog jobLog = xxlJobLogDao.load(id);
103 103
 		if (jobLog == null) {
104
-			logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 日志ID非法");
105
-		} else {
106
-			if (ReturnT.SUCCESS_CODE != jobLog.getTriggerCode()) {
107
-				logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 任务发起调度失败,无法查看执行日志");
108
-			}
109
-
110
-			model.addAttribute("executorAddress", jobLog.getExecutorAddress());
111
-			model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
112
-			model.addAttribute("logId", jobLog.getId());
104
+            throw new RuntimeException("抱歉,日志ID非法.");
113 105
 		}
114 106
 
115
-		model.addAttribute("logStatue", logStatue);
107
+        model.addAttribute("triggerCode", jobLog.getTriggerCode());
108
+        model.addAttribute("handleCode", jobLog.getHandleCode());
109
+        model.addAttribute("executorAddress", jobLog.getExecutorAddress());
110
+        model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
111
+        model.addAttribute("logId", jobLog.getId());
116 112
 		return "joblog/logdetail";
117 113
 	}
118 114
 

+ 11 - 23
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/logdetail.ftl 查看文件

@@ -14,9 +14,10 @@
14 14
             position: absolute;
15 15
             /*color:white;background-color:black*/
16 16
         }
17
-        .logConsoleRunning {
17
+        #logConsoleRunning {
18 18
             font-size: 20px;
19 19
             margin-top: 7px;
20
+            float: left;
20 21
         }
21 22
     </style>
22 23
 </head>
@@ -59,35 +60,22 @@
59 60
     </header>
60 61
 
61 62
     <div class="content-wrapper" >
62
-        <pre class="logConsolePre"><div id="logConsole"></div><li class="fa fa-refresh fa-spin logConsoleRunning" ></li></pre>
63
+        <pre class="logConsolePre"><div id="logConsole"></div>
64
+            <li class="fa fa-refresh fa-spin" id="logConsoleRunning" ></li>
65
+            <div style="margin-top: 50px;" ></div>
66
+        </pre>
63 67
     </div>
64 68
 
65 69
 </div>
66 70
 
67 71
 <@netCommon.commonScript />
68 72
 <script>
69
-
70 73
     // 参数
71
-    var running = true;     // 允许运行
72
-    var executorAddress;
73
-    var triggerTime;
74
-    var logId;
75
-
76
-    // init
77
-    <#if logStatue.code == 200>
78
-        running = true;
79
-        $('.logConsoleRunning').show();
80
-
81
-        executorAddress = '${executorAddress}';
82
-        triggerTime = '${triggerTime}';
83
-        logId = '${logId}';
84
-    <#else>
85
-        running = false;
86
-        $('.logConsoleRunning').hide();
87
-
88
-        $('.logConsole').append('${logStatue.msg}');
89
-    </#if>
90
-
74
+    var triggerCode = '${triggerCode}';
75
+    var handleCode = '${handleCode}';
76
+    var executorAddress = '${executorAddress}';
77
+    var triggerTime = '${triggerTime}';
78
+    var logId = '${logId}';
91 79
 </script>
92 80
 <script src="${request.contextPath}/static/js/logdetail.index.1.js"></script>
93 81
 

+ 77 - 67
xxl-job-admin/src/main/webapp/static/js/logdetail.index.1.js 查看文件

@@ -1,78 +1,88 @@
1 1
 $(function() {
2 2
 
3
-	// valid
4
-	if (!running) {
5
-		return;
6
-	}
3
+    // trigger fail, end
4
+    if (triggerCode != 200) {
5
+        $('#logConsoleRunning').hide();
6
+        $('#logConsole').append('<span style="color: red;">任务发起调度失败,无法查看执行日志</span>');
7
+        return;
8
+    }
7 9
 
8
-	// 加载日志
9
-	var fromLineNum = 0;
10
-	var pullFailCount = 0;
11
-	function pullLog() {
10
+    // pull log
11
+    var fromLineNum = 0;
12
+    var pullFailCount = 0;
13
+    function pullLog() {
14
+        // pullFailCount, max=20
15
+        if (pullFailCount++ > 20) {
16
+            logRunStop('<span style="color: red;">终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志</span>');
17
+            return;
18
+        }
12 19
 
13
-		// pullFailCount, max=20
14
-		if (pullFailCount >= 20) {
15
-			console.log("pullLog fail-count limit");
16
-			running = false;
17
-		}
20
+        // load
21
+        console.log("pullLog, fromLineNum:" + fromLineNum);
18 22
 
19
-		// valid
20
-		if (!running) {
21
-			$('.logConsoleRunning').hide();
22
-			logRun = window.clearInterval(logRun)
23
-			return;
24
-		}
23
+        $.ajax({
24
+            type : 'POST',
25
+            async: false,   // sync, make log ordered
26
+            url : base_url + '/joblog/logDetailCat',
27
+            data : {
28
+                "executorAddress":executorAddress,
29
+                "triggerTime":triggerTime,
30
+                "logId":logId,
31
+                "fromLineNum":fromLineNum
32
+            },
33
+            dataType : "json",
34
+            success : function(data){
25 35
 
26
-		// load
27
-		console.log("pullLog, fromLineNum:" + fromLineNum);
28
-		$.ajax({
29
-			type : 'POST',
30
-			async: false,   // async, avoid js invoke pagelist before jobId data init
31
-			url : base_url + '/joblog/logDetailCat',
32
-			data : {
33
-				"executorAddress":executorAddress,
34
-				"triggerTime":triggerTime,
35
-				"logId":logId,
36
-				"fromLineNum":fromLineNum
37
-			},
38
-			dataType : "json",
39
-			success : function(data){
40
-				pullFailCount++;
41
-				if (data.code == 200) {
42
-					if (!data.content) {
43
-						console.log('pullLog fail');
44
-						return;
45
-					}
46
-					if (fromLineNum != data.content.fromLineNum) {
47
-						console.log('pullLog fromLineNum not match');
48
-						return;
49
-					}
50
-					if (fromLineNum == (data.content.toLineNum + 1) ) {
51
-						console.log('pullLog already line-end');
52
-						return;
53
-					}
36
+                if (data.code == 200) {
37
+                    if (!data.content) {
38
+                        console.log('pullLog fail');
39
+                        return;
40
+                    }
41
+                    if (fromLineNum != data.content.fromLineNum) {
42
+                        console.log('pullLog fromLineNum not match');
43
+                        return;
44
+                    }
45
+                    if (fromLineNum == (data.content.toLineNum + 1) ) {
46
+                        console.log('pullLog already line-end');
47
+                        return;
48
+                    }
54 49
 
55
-					// append
56
-					fromLineNum = data.content.toLineNum + 1;
57
-					$('#logConsole').append(data.content.logContent);
58
-					pullFailCount = 0;
50
+                    // append
51
+                    fromLineNum = data.content.toLineNum + 1;
52
+                    $('#logConsole').append(data.content.logContent);
53
+                    pullFailCount = 0;
54
+
55
+                    // valid end
56
+                    if (data.content.end) {
57
+                        logRunStop('<span style="color: green;">[Rolling Log Finish]</span>');
58
+                        return;
59
+                    }
60
+                } else {
61
+                    console.log('pullLog fail:'+data.msg);
62
+                }
63
+            }
64
+        });
65
+    }
66
+
67
+    // pull first page
68
+    pullLog();
69
+
70
+    // handler already callback, end
71
+    if (handleCode > 0) {
72
+        logRunStop('<span style="color: green;">[Log Finish]</span>');
73
+        return;
74
+    }
75
+
76
+    // round until end
77
+    var logRun = setInterval(function () {
78
+        pullLog()
79
+    }, 3000);
80
+    function logRunStop(content){
81
+        $('#logConsoleRunning').hide();
82
+        logRun = window.clearInterval(logRun);
83
+        $('#logConsole').append(content);
84
+    }
59 85
 
60
-					// valid end
61
-					if (data.content.end) {
62
-						running = false;
63
-						console.log("pullLog already file-end");
64
-					}
65
-				} else {
66
-					ComAlertTec.show(data.msg);
67
-				}
68
-			}
69
-		});
70
-	}
71 86
 
72
-	// 周期运行
73
-	pullLog();
74
-	var logRun = setInterval(function () {
75
-		pullLog()
76
-	}, 3000);
77 87
 
78 88
 });

+ 7 - 0
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/LogResult.java 查看文件

@@ -8,6 +8,13 @@ import java.io.Serializable;
8 8
 public class LogResult implements Serializable {
9 9
     private static final long serialVersionUID = 42L;
10 10
 
11
+    public LogResult(int fromLineNum, int toLineNum, String logContent, boolean isEnd) {
12
+        this.fromLineNum = fromLineNum;
13
+        this.toLineNum = toLineNum;
14
+        this.logContent = logContent;
15
+        this.isEnd = isEnd;
16
+    }
17
+
11 18
     private int fromLineNum;
12 19
     private int toLineNum;
13 20
     private String logContent;

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

@@ -122,12 +122,12 @@ public class XxlJobFileAppender extends AppenderSkeleton {
122 122
 
123 123
 		// valid log file
124 124
 		if (logFileName==null || logFileName.trim().length()==0) {
125
-			return null;
125
+            return new LogResult(fromLineNum, -1, "readLog fail, logFile not found", true);
126 126
 		}
127 127
 		File logFile = new File(filePath, logFileName);
128 128
 
129 129
 		if (!logFile.exists()) {
130
-			return null;
130
+            return new LogResult(fromLineNum, -1, "readLog fail, logFile not exists", true);
131 131
 		}
132 132
 
133 133
 		// read file
@@ -157,11 +157,7 @@ public class XxlJobFileAppender extends AppenderSkeleton {
157 157
 		}
158 158
 
159 159
 		// result
160
-		LogResult logResult = new LogResult();
161
-		logResult.setFromLineNum(fromLineNum);
162
-		logResult.setToLineNum(toLineNum);
163
-		logResult.setLogContent(logContentBuffer.toString());
164
-		logResult.setEnd(false);
160
+		LogResult logResult = new LogResult(fromLineNum, toLineNum, logContentBuffer.toString(), false);
165 161
 		return logResult;
166 162
 
167 163
 		/*