龙空技术网

使用Java连接Shell输出日志

蔫儿茄子 534

前言:

此时看官们对“怎样让java输出日志内容”大约比较关怀,姐妹们都需要分析一些“怎样让java输出日志内容”的相关内容。那么小编也在网络上网罗了一些对于“怎样让java输出日志内容””的相关资讯,希望你们能喜欢,咱们一起来了解一下吧!

前言:自己的搭建了一个平台,为了方便查看日志,使用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());}

效果图

标签: #怎样让java输出日志内容