JSch打印日志

添加必要的依赖项

确保您的项目中包含了 SLF4J API 和具体的日志实现(例如 Logback 或 Log4j2)。在 pom.xml 中添加如下依赖项

<dependency>
	<groupId>com.jcraft</groupId>
	<artifactId>jsch</artifactId>
	<version>0.1.55</version>
</dependency>

<!-- SLF4J API -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>2.0.9</version>
</dependency>

<!-- Logback 绑定 -->
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.4.14</version>
</dependency>

#创建自定义的 JSch 日志记录器
该记录器实现了 JSch 的 Logger 接口,并使用 SLF4J 进行实际的日志记录。

package com.olive;

import com.jcraft.jsch.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jLogger implements com.jcraft.jsch.Logger {
	
    private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(Slf4jLogger.class);

    @Override
    public boolean isEnabled(int level) {
        switch (level) {
            case Logger.DEBUG:
                return LOG.isDebugEnabled();
            case Logger.INFO:
                return LOG.isInfoEnabled();
            case Logger.WARN:
                return LOG.isWarnEnabled();
            case Logger.ERROR:
                return LOG.isErrorEnabled();
            default:
                return false;
        }
    }

    @Override
    public void log(int level, String message) {
        switch (level) {
            case Logger.DEBUG:
                LOG.debug(message);
                break;
            case Logger.INFO:
                LOG.info(message);
                break;
            case Logger.WARN:
                LOG.warn(message);
                break;
            case Logger.ERROR:
                LOG.error(message);
                break;
        }
    }
}

在代码中设置 JSch 使用自定义的日志记录器

String host = "192.168.56.122"; // SSH服务器地址
String user = "root"; // 用户名
String password = "root"; // 密码
int port = 22; // SSH端口,默认是22
String command = "ls /"; // 要执行的命令
JSch.setLogger(new Slf4jLogger());
try {
	JSch jsch = new JSch();
	Session session = jsch.getSession(user, host, port);
	session.setPassword(password);
	session.setConfig("StrictHostKeyChecking", "no"); // 首次连接时可以设置为"no",之后建议设置为"yes"以提高安全性
	session.connect();

	Channel channel = session.openChannel("exec");
	((ChannelExec) channel).setCommand(command);
	channel.setInputStream(null);
	((ChannelExec) channel).setErrStream(System.err); // 错误输出到标准错误流
	InputStream in = channel.getInputStream();
	channel.connect();

	// 读取命令输出结果
	byte[] tmp = new byte[1024];
	while (true) {
		while (in.available() > 0) {
			int i = in.read(tmp, 0, 1024);
			if (i < 0)
				break;
			System.out.print(new String(tmp, 0, i)); // 打印命令输出结果
		}
		if (channel.isClosed()) {
			if (in.available() > 0)
				continue; // 可能还有残留的输出,继续读取直到没有更多输出为止
			System.out.println("exit-status: " + channel.getExitStatus()); // 获取退出状态码
			break;
		}
	}
	channel.disconnect();
	session.disconnect();
} catch (Exception e) {
	e.printStackTrace();
}

通过上述步骤,您可以成功地将 JSch 的日志输出重定向到 SLF4J,并进一步由 Logback 或其他任何兼容的 SLF4J 实现处理。这样做的好处是能够利用现有的日志框架进行集中化的日志管理和分析。

参考

https://blog.youkuaiyun.com/lnkToKing/article/details/123656245
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG弄潮儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值