读取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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2021-05-26 java8新时间API-LocalDateTime(转)