网站首页 > 博客文章 正文
前言:自己的搭建了一个平台,为了方便查看日志,使用Java自研了一个查看日志的界面。我的做法是使用Java登录到服务器上,根据前端传入的路径,每次最多获取20条的数据,前端每个2s钟刷新一次接口,第一个会根据文件的当前行读取内容,后续会根据前端传入的行数顺序往后读取文件内容。
如下登录Shell的工具类
public class SessionUtil { private static final Logger infoLogger = LoggerFactory.getLogger("infoLogger"); private Session session; @Value("${ssh.host}") private String sshHost; @Value("${ssh.user}") private String sshUser; @Value("${ssh.passwd}") private String sshPasswd; @PreDestroy public void cleanUp() { closeConnection(); } public Session getSession() { if (session == null) { this.session = JschUtil.getSession(sshHost, 22, sshUser, sshPasswd); } return this.session; } private void closeConnection() { if (session != null) { try { this.session.disconnect(); infoLogger.info("关闭Session连接"); this.session = null; } catch (Exception e) { e.printStackTrace(); } } } }
如下是我的根据前端传入的文件的目录,获取文件的内容
// 列出当前的文件夹下的所有的文件夹 Session session = sessionUtil.getSession(); try { ChannelShell channel = (ChannelShell) session.openChannel("shell"); channel.connect(); //从远程端到达的所有数据都能从这个流中读取到 InputStream inputStream = channel.getInputStream(); //写入该流的所有数据都将发送到远程端。 OutputStream outputStream = channel.getOutputStream(); //使用PrintWriter流的目的就是为了使用println这个方法 PrintWriter printWriter = new PrintWriter(outputStream); StringBuilder pathString = new StringBuilder(""); if (StringUtils.isNotEmpty(source)) { String[] split = source.split("_"); for (String s : split) { pathString.append("/").append(s); } } else { pathString.append("/data/logs/"); } String cmd = "wc -l "+ pathString +" |awk '{print $1}'"; infoLogger.info("cmd = {}",cmd); printWriter.println(cmd); printWriter.println("exit");//加上个就是为了,结束本次交互 printWriter.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(inputStream)); String msg = ""; List<String> stringList = new ArrayList<String>(); boolean isWrite = false; while ((msg = in.readLine()) != null) { if (isWrite && StringUtils.isNumeric(msg)) { stringList.add(msg); } if (msg.indexOf("wc -l") > 0) { isWrite = true; } } resultFile = stringList; in.close(); channel.disconnect(); } catch (Exception e) { errorLogger.info(e.toString()); }
效果图
猜你喜欢
- 2024-10-08 简单介绍如何为linux集群快速配置ntp
- 2024-10-08 hadoop新手入门篇:hadoop集群服务器详细配置教程
- 2024-10-08 创建并使用SSH密钥登录服务器(ssh创建公钥)
- 2024-10-08 Jumpserver开源跳板机安装部署(跳板机远程)
- 2024-10-08 Ansible详解(一)基础安装和配置(ansible-managed)
- 2024-10-08 Ansible的免密码配置(ansible配置免密登录)
- 2024-10-08 掌握SpringBoot-2.3的容器探针:实战篇
- 2024-10-08 一次“诡异”的 Ansible 密码问题排查,最后真相?
- 2024-10-08 巧妙的Linux命令,再来6个(linux 的命令)
- 2024-10-08 Linux-SFTP/SSH免密码登录(linux服务器ssh如何配置免密码登录)
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)