需求:分布式应用 server 获取 不同worker应用日志展示到前台
服务端的service方法,把
@Service
public class LogService {
@Value("${client.dataxlogpath}")
private String dataXLogPath;
public String getLog(String taskId) {
File file = new File(dataXLogPath + "/" +taskId + ".log");
StringBuffer stringBuffer = new StringBuffer();
try
{
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String line = "";
//替换成html段落格式
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line.replaceAll("^", "<p>").replaceAll("$", "</p>").replaceAll("\\t", " "));
}
bufferedReader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
String log = stringBuffer.toString();
return log;
}
public static void main(String[] args) {
new LogService().getLog("1");
}
}
服务端的service
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public String getJobLog(String taskId,String workerAddress){
StringBuffer logMessage = new StringBuffer();
long timestamp = System.currentTimeMillis();
CloseableHttpClient client = HttpClients.createDefault();
CloseableHttpResponse response = null;
String url = "http://"+workerAddress+":9002/queryLog?taskId="+taskId;
System.out.println(url);
HttpGet get = new HttpGet(url);
get.setHeader("local_name", "zh_CN");
get.setHeader("Content-Type", "application/json");
try {
response = client.execute(get);
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String s = null;
while ((s = br.readLine()) != null) {
logMessage.append(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return logMessage.toString();
}
服务端controller
@RequestMapping("/joblog")
public String abController(String taskId, String workerAddress, ModelMap modelMap) {
String instanceLog=abService.getJobLog(taskId,workerAddress).replaceAll("\r\n","<br/>").replaceAll("\\\\","");
modelMap.addAttribute("log",instanceLog);
return "loginfo";
}
前端显示基于 Thymeleaf
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>111</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<style type="text/css">
body {
background-color: #000000;
color: greenyellow;
}
</style>
</head>
<body>
<p th:utext="${log}"></p>
</body>
</html>