读取logback日志
记录日志的目的就是为了读日志,对应工程师而言,一般直接去服务器后端读日志。
但是如果我们开发一个调度系统,用户自己的任务日志我们不可能让客户去后台读,那么就需要提供一个api接口,
将任务对应的日志返回给前端。
这部分内容参考了dolphinscheduler的源码。特此声明。
@Service public class TaskLogServiceImpl implements TaskLogService { //获取文件二进制格式,用于下载文件 @Override public byte[] getFileContent(String path) { try (FileInputStream in = new FileInputStream(path); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ) { byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) != -1) { bos.write(buf, 0, len); } return bos.toByteArray(); } catch (IOException e) { e.printStackTrace(); } return new byte[0]; } //获取string格式文件,用于网页展示 @Override public String getWholeFile(String path) { String line; StringBuilder sb = new StringBuilder(); try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path)))) { while ((line = br.readLine()) != null) { sb.append(line).append("\r\n"); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); } return ""; } //获取一部分文件,用于网页刷新 @Override public String getPartFile(String path, int skipLine, int limit) { StringBuilder sb = new StringBuilder(); final File file = new File(path); if (file.exists() && file.isFile()) { try (Stream<String> lines = Files.lines(Paths.get(path))) { final List<String> list = lines.skip(skipLine).limit(limit).collect(Collectors.toList()); for (String line : list) { sb.append(line).append("\r\n"); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); } } return ""; } //删除文件 @Override public boolean remove(String path) { final File file = new File(path); try { if(file.exists()){ return file.delete(); } } catch (Exception e) { e.printStackTrace(); } return false; } @Override public String getLogPath(String groupName, String jobName) { return Paths.get("logs",groupName,jobName+".log").toString(); } }