用java把服务器某个目录日志实时打印出来

1.引入第三方包

java 复制代码
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

2.代码如下

java 复制代码
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class MySQLPortForwarding {
    public static void main(String[] args) throws Exception{
        String sshHost = ""; //服务器ip
        String sshUsername = ""; //用户名称
        String sshPassword = ""; //用户密码
        String remoteHost = "localhost";
        int localPort = 3307; // 本地端口
        int remotePort = 3306; // 远程MySQL服务器端口

        JSch jsch = new JSch();
        Session session = jsch.getSession(sshUsername, sshHost, 22);
        session.setPassword(sshPassword);
        session.setConfig("StrictHostKeyChecking", "no");
        System.out.println("建立SSH连接...");
        session.connect();
       /*  //这步是做端口转发的,与文章无关,目的:服务器安装的有mysql,然后防火墙没开3306,本地无法直接连接mysql,
        // 这一步本地可以用过localhost:3307连接服务器的mysql
        int assignedPort = session.setPortForwardingL(localPort, remoteHost, remotePort);
        System.out.println("本地端口 " + assignedPort + " 被转发到 " + remoteHost + ":" + remotePort);*/
        String command = "tail -f " + "/tmp/debug.log";
        ChannelExec channel = (ChannelExec) session.openChannel("exec");
        channel.setCommand(command);

        InputStream in = channel.getInputStream();
        channel.connect();

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line); // 实时打印日志内容
        }

        channel.disconnect();
        session.disconnect();
    }

}
相关推荐
考虑考虑3 小时前
JDK25模块导入声明
java·后端·java ee
_小马快跑_4 小时前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
_小马快跑_4 小时前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android
_小马快跑_4 小时前
Kotlin | 从SparseArray、ArrayMap的set操作符看类型检查的不同
android
_小马快跑_4 小时前
Android | 为什么有了ArrayMap还要再设计SparseArray?
android
_小马快跑_4 小时前
Android TextView图标对齐优化:使用LayerList精准控制drawable位置
android
_小马快跑_4 小时前
Kotlin协程并发控制:多线程环境下的顺序执行
android
_小马快跑_4 小时前
Kotlin协程异常捕获陷阱:try-catch捕获异常失败了?
android
_小马快跑_4 小时前
Android | 权限申请与前置说明弹窗同时展示的优雅方案
android
_小马快跑_4 小时前
Android | Channel 与 Flow的异同点
android