gpt4 book ai didi

java - JSch 登录文件

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:57 26 4
gpt4 key购买 nike

我想将 JSch 日志保存在文件中,因为它不会在控制台中显示任何内容。

这是我的代码:

public boolean openConnection() throws ItsSshException {
boolean connectSuccess = false;

JSch.setLogger(new MyLogger());

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
jschSSH.setConfig(config);
try {
sshSession = jschSSH.getSession(username, hostname, port);
sshSession.setPassword(password);
sshSession.connect(connectionTimeout);
LOGGER.info("Connection timeout : " + connectionTimeout);
Thread.sleep(1000);
sshHChannel = sshSession.openChannel("shell");
sshHChannel.connect();
in = sshHChannel.getInputStream();
out = new PrintStream(sshHChannel.getOutputStream());
clearInitialSocketState();
connectSuccess = true;
} catch (Exception e) {
LOGGER.error("Error during connectiong to host: " + hostname +
", port: " + port + "!", e);
throw new ItsSshException("Error during connectiong to host: " + e.getMessage());
}
LOGGER.info("connectSuccess : " + connectSuccess);
return connectSuccess;
}

public static class MyLogger implements com.jcraft.jsch.Logger {
static java.util.Hashtable name=new java.util.Hashtable();
static{
name.put(new Integer(DEBUG), "DEBUG: ");
name.put(new Integer(INFO), "INFO: ");
name.put(new Integer(WARN), "WARN: ");
name.put(new Integer(ERROR), "ERROR: ");
name.put(new Integer(FATAL), "FATAL: ");
}
public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
System.err.print(name.get(new Integer(level)));
System.err.println(message);
}
}

将 jsch 记录器放在哪里以获取文件中的一些信息。我试过但从未成功:D

最佳答案

使用Logger.logMyLogger.log 中:

public void log(int level, String message){
LOGGER.log(loggerlevel, message);
}

一个完整的代码可以是这样的:

static private class MyJSchLogger implements com.jcraft.jsch.Logger {
private java.util.logging.Logger logger;

public MyJSchLogger(java.util.logging.Logger logger) {
this.logger = logger;
}

public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
java.util.logging.Level l;
switch (level)
{
case com.jcraft.jsch.Logger.DEBUG:
l = java.util.logging.Level.FINE;
break;
case com.jcraft.jsch.Logger.INFO:
l = java.util.logging.Level.INFO;
break;
case com.jcraft.jsch.Logger.WARN:
l = java.util.logging.Level.WARNING;
break;
default:
case com.jcraft.jsch.Logger.ERROR:
case com.jcraft.jsch.Logger.FATAL:
l = java.util.logging.Level.SEVERE;
break;
}
this.logger.log(l, message);
}
}

要将记录器与 JSch 相关联,请使用:

JSch.setLogger(new MyJSchLogger(logger));

假设 Java logger 存在。

如果没有,您可以像这样创建一个:

java.util.logging.Logger logger = java.util.logging.Logger.getLogger("MyJSch");
java.util.logging.FileHandler fh = new java.util.logging.FileHandler("C:\\path\\jsch.log");
java.util.logging.SimpleFormatter formatter = new java.util.logging.SimpleFormatter();
fh.setFormatter(formatter);
logger.addHandler(fh);

虽然如果你只需要登录到一个文件,你可以直接这样做:

JSch.setLogger(new com.jcraft.jsch.Logger() {
Path path = Paths.get("C:\\path\\jsch.log");
@Override
public boolean isEnabled(int level){
return true;
}
public void log(int level, String message){
try {
StandardOpenOption option =
!Files.exists(path) ? StandardOpenOption.CREATE : StandardOpenOption.APPEND;
Files.write(path, java.util.Arrays.asList(message), option);
} catch (IOException e) {
System.err.println(message);
}
}
});

关于java - JSch 登录文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com