读取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();
    }

    
}

 

posted @ 2022-05-26 15:56  Mars.wang  阅读(247)  评论(0编辑  收藏  举报