rolling日志
This commit is contained in:
parent
ae26cb0c5d
commit
d917c9443b
|
@ -101,18 +101,14 @@ public class JobLogController {
|
||||||
ReturnT<String> logStatue = ReturnT.SUCCESS;
|
ReturnT<String> logStatue = ReturnT.SUCCESS;
|
||||||
XxlJobLog jobLog = xxlJobLogDao.load(id);
|
XxlJobLog jobLog = xxlJobLogDao.load(id);
|
||||||
if (jobLog == null) {
|
if (jobLog == null) {
|
||||||
logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 日志ID非法");
|
throw new RuntimeException("抱歉,日志ID非法.");
|
||||||
} else {
|
|
||||||
if (ReturnT.SUCCESS_CODE != jobLog.getTriggerCode()) {
|
|
||||||
logStatue = new ReturnT<String>(ReturnT.FAIL_CODE, "查看执行日志失败: 任务发起调度失败,无法查看执行日志");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.addAttribute("triggerCode", jobLog.getTriggerCode());
|
||||||
|
model.addAttribute("handleCode", jobLog.getHandleCode());
|
||||||
model.addAttribute("executorAddress", jobLog.getExecutorAddress());
|
model.addAttribute("executorAddress", jobLog.getExecutorAddress());
|
||||||
model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
|
model.addAttribute("triggerTime", jobLog.getTriggerTime().getTime());
|
||||||
model.addAttribute("logId", jobLog.getId());
|
model.addAttribute("logId", jobLog.getId());
|
||||||
}
|
|
||||||
|
|
||||||
model.addAttribute("logStatue", logStatue);
|
|
||||||
return "joblog/logdetail";
|
return "joblog/logdetail";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,9 +14,10 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
/*color:white;background-color:black*/
|
/*color:white;background-color:black*/
|
||||||
}
|
}
|
||||||
.logConsoleRunning {
|
#logConsoleRunning {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
margin-top: 7px;
|
margin-top: 7px;
|
||||||
|
float: left;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
@ -59,35 +60,22 @@
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="content-wrapper" >
|
<div class="content-wrapper" >
|
||||||
<pre class="logConsolePre"><div id="logConsole"></div><li class="fa fa-refresh fa-spin logConsoleRunning" ></li></pre>
|
<pre class="logConsolePre"><div id="logConsole"></div>
|
||||||
|
<li class="fa fa-refresh fa-spin" id="logConsoleRunning" ></li>
|
||||||
|
<div style="margin-top: 50px;" ></div>
|
||||||
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<@netCommon.commonScript />
|
<@netCommon.commonScript />
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
// 参数
|
// 参数
|
||||||
var running = true; // 允许运行
|
var triggerCode = '${triggerCode}';
|
||||||
var executorAddress;
|
var handleCode = '${handleCode}';
|
||||||
var triggerTime;
|
var executorAddress = '${executorAddress}';
|
||||||
var logId;
|
var triggerTime = '${triggerTime}';
|
||||||
|
var logId = '${logId}';
|
||||||
// init
|
|
||||||
<#if logStatue.code == 200>
|
|
||||||
running = true;
|
|
||||||
$('.logConsoleRunning').show();
|
|
||||||
|
|
||||||
executorAddress = '${executorAddress}';
|
|
||||||
triggerTime = '${triggerTime}';
|
|
||||||
logId = '${logId}';
|
|
||||||
<#else>
|
|
||||||
running = false;
|
|
||||||
$('.logConsoleRunning').hide();
|
|
||||||
|
|
||||||
$('.logConsole').append('${logStatue.msg}');
|
|
||||||
</#if>
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<script src="${request.contextPath}/static/js/logdetail.index.1.js"></script>
|
<script src="${request.contextPath}/static/js/logdetail.index.1.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,28 @@
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
// valid
|
// trigger fail, end
|
||||||
if (!running) {
|
if (triggerCode != 200) {
|
||||||
|
$('#logConsoleRunning').hide();
|
||||||
|
$('#logConsole').append('<span style="color: red;">任务发起调度失败,无法查看执行日志</span>');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载日志
|
// pull log
|
||||||
var fromLineNum = 0;
|
var fromLineNum = 0;
|
||||||
var pullFailCount = 0;
|
var pullFailCount = 0;
|
||||||
function pullLog() {
|
function pullLog() {
|
||||||
|
|
||||||
// pullFailCount, max=20
|
// pullFailCount, max=20
|
||||||
if (pullFailCount >= 20) {
|
if (pullFailCount++ > 20) {
|
||||||
console.log("pullLog fail-count limit");
|
logRunStop('<span style="color: red;">终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志</span>');
|
||||||
running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// valid
|
|
||||||
if (!running) {
|
|
||||||
$('.logConsoleRunning').hide();
|
|
||||||
logRun = window.clearInterval(logRun)
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// load
|
// load
|
||||||
console.log("pullLog, fromLineNum:" + fromLineNum);
|
console.log("pullLog, fromLineNum:" + fromLineNum);
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type : 'POST',
|
type : 'POST',
|
||||||
async: false, // async, avoid js invoke pagelist before jobId data init
|
async: false, // sync, make log ordered
|
||||||
url : base_url + '/joblog/logDetailCat',
|
url : base_url + '/joblog/logDetailCat',
|
||||||
data : {
|
data : {
|
||||||
"executorAddress":executorAddress,
|
"executorAddress":executorAddress,
|
||||||
|
@ -37,7 +32,7 @@ $(function() {
|
||||||
},
|
},
|
||||||
dataType : "json",
|
dataType : "json",
|
||||||
success : function(data){
|
success : function(data){
|
||||||
pullFailCount++;
|
|
||||||
if (data.code == 200) {
|
if (data.code == 200) {
|
||||||
if (!data.content) {
|
if (!data.content) {
|
||||||
console.log('pullLog fail');
|
console.log('pullLog fail');
|
||||||
|
@ -59,20 +54,35 @@ $(function() {
|
||||||
|
|
||||||
// valid end
|
// valid end
|
||||||
if (data.content.end) {
|
if (data.content.end) {
|
||||||
running = false;
|
logRunStop('<span style="color: green;">[Rolling Log Finish]</span>');
|
||||||
console.log("pullLog already file-end");
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ComAlertTec.show(data.msg);
|
console.log('pullLog fail:'+data.msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 周期运行
|
// pull first page
|
||||||
pullLog();
|
pullLog();
|
||||||
|
|
||||||
|
// handler already callback, end
|
||||||
|
if (handleCode > 0) {
|
||||||
|
logRunStop('<span style="color: green;">[Log Finish]</span>');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// round until end
|
||||||
var logRun = setInterval(function () {
|
var logRun = setInterval(function () {
|
||||||
pullLog()
|
pullLog()
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
function logRunStop(content){
|
||||||
|
$('#logConsoleRunning').hide();
|
||||||
|
logRun = window.clearInterval(logRun);
|
||||||
|
$('#logConsole').append(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,6 +8,13 @@ import java.io.Serializable;
|
||||||
public class LogResult implements Serializable {
|
public class LogResult implements Serializable {
|
||||||
private static final long serialVersionUID = 42L;
|
private static final long serialVersionUID = 42L;
|
||||||
|
|
||||||
|
public LogResult(int fromLineNum, int toLineNum, String logContent, boolean isEnd) {
|
||||||
|
this.fromLineNum = fromLineNum;
|
||||||
|
this.toLineNum = toLineNum;
|
||||||
|
this.logContent = logContent;
|
||||||
|
this.isEnd = isEnd;
|
||||||
|
}
|
||||||
|
|
||||||
private int fromLineNum;
|
private int fromLineNum;
|
||||||
private int toLineNum;
|
private int toLineNum;
|
||||||
private String logContent;
|
private String logContent;
|
||||||
|
|
|
@ -122,12 +122,12 @@ public class XxlJobFileAppender extends AppenderSkeleton {
|
||||||
|
|
||||||
// valid log file
|
// valid log file
|
||||||
if (logFileName==null || logFileName.trim().length()==0) {
|
if (logFileName==null || logFileName.trim().length()==0) {
|
||||||
return null;
|
return new LogResult(fromLineNum, -1, "readLog fail, logFile not found", true);
|
||||||
}
|
}
|
||||||
File logFile = new File(filePath, logFileName);
|
File logFile = new File(filePath, logFileName);
|
||||||
|
|
||||||
if (!logFile.exists()) {
|
if (!logFile.exists()) {
|
||||||
return null;
|
return new LogResult(fromLineNum, -1, "readLog fail, logFile not exists", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// read file
|
// read file
|
||||||
|
@ -157,11 +157,7 @@ public class XxlJobFileAppender extends AppenderSkeleton {
|
||||||
}
|
}
|
||||||
|
|
||||||
// result
|
// result
|
||||||
LogResult logResult = new LogResult();
|
LogResult logResult = new LogResult(fromLineNum, toLineNum, logContentBuffer.toString(), false);
|
||||||
logResult.setFromLineNum(fromLineNum);
|
|
||||||
logResult.setToLineNum(toLineNum);
|
|
||||||
logResult.setLogContent(logContentBuffer.toString());
|
|
||||||
logResult.setEnd(false);
|
|
||||||
return logResult;
|
return logResult;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue